From 274080a485c534c5ad01e225b4300d72a036add1 Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Tue, 16 Apr 2019 18:09:53 -0700 Subject: [PATCH] The models finally compile. --- example-data/nfv-vnf-pkg.xml | 90 + example-data/nfv.xml | 24 +- run-test.sh | 11 +- src/yang/etsi-nfv-common.yang | 28 +- src/yang/etsi-nfv-descriptors.yang | 14 +- src/yang/etsi-nfv-ns.yang | 4 +- src/yang/etsi-nfv-vnf.yang | 4287 ++++++++++++++-------------- 7 files changed, 2332 insertions(+), 2126 deletions(-) create mode 100644 example-data/nfv-vnf-pkg.xml diff --git a/example-data/nfv-vnf-pkg.xml b/example-data/nfv-vnf-pkg.xml new file mode 100644 index 0000000..9f31cbc --- /dev/null +++ b/example-data/nfv-vnf-pkg.xml @@ -0,0 +1,90 @@ + + ASA + My Company + My Company ASAv + 9.8 + 9.8 + My Company Vnfm + + firewall + Firewall VDU + + inside + nfv:ethernet + + + management + nfv:ethernet + + + outside + nfv:ethernet + + asa-vcd + asa-vsd + asa-image + + + asa-vcd + + 4.0 + + + 2 + + + + asa-vsd + nfv:root-storage + 0 + + + asa-image + ASA image + 1.1 + + nfv:sha-224 + deadbeef + + bare + qcow2 + 2.0 + 1 + http://www.cisco.com/asa.qcow2 + + + inside + nfv:ethernet + + + management + nfv:ethernet + + + outside + nfv:ethernet + + + normal + + firewall + 1 + 2 + + + double + + firewall + 2 + + + + single + + firewall + 1 + + + single + + diff --git a/example-data/nfv.xml b/example-data/nfv.xml index 4b5b9d4..729a284 100644 --- a/example-data/nfv.xml +++ b/example-data/nfv.xml @@ -34,11 +34,11 @@ 2 - + asa-vsd root-storage 0 - + asa-image ASA image @@ -136,11 +136,11 @@ 2 - + csr-vsd root-storage 0 - + csr-image CSR image @@ -256,9 +256,7 @@ fw2dpi - - ethernet - + ethernet normal @@ -271,9 +269,7 @@ mgmt - - ipv4 - + ipv4 normal @@ -286,9 +282,7 @@ r2fw - - ethernet - + ethernet normal @@ -511,9 +505,7 @@ r2fw - - ipv4 - + ipv4 r2fw diff --git a/run-test.sh b/run-test.sh index 1360199..241379e 100755 --- a/run-test.sh +++ b/run-test.sh @@ -7,17 +7,24 @@ set -e source /opt/confd/confdrc cd src -echo "Testing compilation" CONFD_OPTS="--fail-on-warnings" CONFD_OPTS="" + +echo "Testing compilations of pkg." +confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-pkg.fxs etsi-nfv-pkg.yang +echo "Testing compilations of descriptors." confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-descriptors.fxs etsi-nfv-descriptors.yang echo "Starting ConfD" confd -echo "Loading Data" +echo "Loading Data for pkg" +confd_load -l -m nfv-vnf-pkg.xml + +echo "Loading Data for descriptors" confd_load -l -m nfv.xml + # Don't do this in the actual test, just waste of cycles # echo "Stopping ConfD" # confd --stop diff --git a/src/yang/etsi-nfv-common.yang b/src/yang/etsi-nfv-common.yang index 2529599..f30f825 100644 --- a/src/yang/etsi-nfv-common.yang +++ b/src/yang/etsi-nfv-common.yang @@ -3,6 +3,9 @@ submodule etsi-nfv-common { belongs-to etsi-nfv-descriptors { prefix nfv; } + organization + "European Telecommunications Standards Institute (ETSI)"; + description "Common data types for ETSI data models."; @@ -239,7 +242,7 @@ submodule etsi-nfv-common { description "Ephemeral type of storage."; } - + /* * Typedefs */ @@ -316,14 +319,10 @@ submodule etsi-nfv-common { grouping connectivity-type { container connectivity-type { - list layer-protocol { - key "protocol"; - - leaf protocol { - type identityref { - base layer-protocol; - } - } + leaf-list layer-protocol { + type identityref { + base layer-protocol; + } description "Identifies the protocols that the VL uses (Ethernet, MPLS, ODU2, IPV4, IPV6, Pseudo-Wire). The top layer @@ -634,17 +633,6 @@ submodule etsi-nfv-common { reference "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; } - - leaf security-group-rule-id { - type leafref { - path "/nfv/vnfd/security-group-rule/id"; - } - description - "Reference of the security group rules bound to this - CPD."; - reference - "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; - } } grouping security-group-rule { diff --git a/src/yang/etsi-nfv-descriptors.yang b/src/yang/etsi-nfv-descriptors.yang index d642129..e2725a8 100644 --- a/src/yang/etsi-nfv-descriptors.yang +++ b/src/yang/etsi-nfv-descriptors.yang @@ -22,7 +22,19 @@ module etsi-nfv-descriptors { } container nfv { - uses vnfd; + list vnfd { + key "id"; + description + "A VNF Descriptor (VNFD) is a deployment template which + describes a VNF in terms of deployment and operational + behaviour requirements. It also contains connectivity, + interface and virtualised resource requirements"; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + + uses vnfd; + } + uses nsd; uses pnfd; } diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index 9856e4c..60f99fe 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -1097,7 +1097,7 @@ submodule etsi-nfv-ns { leaf id { type string; description - "Identifier of Identifier of this + "Identifier of Identifier of this AffinityOrAntiAffinityGroup information element."; reference "GS NFV IFA014: Section 6.3.5.2 AffinityOrAntiAffinity @@ -1567,7 +1567,7 @@ submodule etsi-nfv-ns { information element"; } } - } + } } uses security-parameters; } diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index 668bb72..ff16652 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -86,568 +86,646 @@ submodule etsi-nfv-vnf { "GS NFV-IFA011: Section 7.1.6.6, VirtualNetworkInterfaceRequirements information element"; } - - leaf nicio-requirements { - type leafref { - path "/nfv/vnfd/virtual-compute-desc/id"; - } - description - "This references (couples) the CPD with any logical node I/O - requirements (for network devices) that may have been - created. Linking these attributes is necessary so that so - that I/O requirements that need to be articulated at the - logical node level can be associated with the network - interface requirements associated with the CPD."; - reference - "GS NFV-IFA011: Section 7.1.6.6, - VirtualNetworkInterfaceRequirements information element"; - } } } grouping vnfd { - list vnfd { - key "id"; + leaf id { + type string; + description + "Identifier of this VNFD information element. This attribute + shall be globally unique. The format will be defined in the + data model specification phase."; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf provider { + type string; + mandatory true; + description + "Provider of the VNF and of the VNFD"; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf product-name { + type string; + mandatory true; + description + "Name to identify the VNF Product. Invariant for the VNF + Product lifetime."; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf software-version { + type string; + mandatory true; + description + "Software version of the VNF. This is changed when there is + any change to the software that is included in the VNF + Package"; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf version { + type string; + mandatory true; + description + "Identifies the version of the VNFD"; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf product-info-name { + type string; + description + "Human readable name of the VNFD. Can change + during the VNF Product lifetime."; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf product-info-description { + type string; + description + "Human readable description of the VNFD. Can change during + the VNF Product lifetime."; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf-list vnfm-info { + type string; + min-elements 1; + description + "Identifies VNFM(s) compatible with the VNF described in + this version of the VNFD."; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf localization-language { + type string; description - "A VNF Descriptor (VNFD) is a deployment template which - describes a VNF in terms of deployment and operational - behaviour requirements. It also contains connectivity, - interface and virtualised resource requirements"; + "Information about the language of the VNF."; reference "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + leaf default-localization-language { + when "../localization-language"; + type string; + description + "Default localization language that is instantiated if no + information about selected localization language is + available. Shall be present if 'localization-language' + is present and shall be absent otherwise."; + reference + "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + } + + list vdu { + key "id"; + min-elements 1; + description + "The Virtualisation Deployment Unit (VDU) is a construct supporting + the description of the deployment and operational behaviour of a + VNF component, or the entire VNF if it was not componentized in + components."; + reference + "GS NFV IFA011: Section 7.1.2, VNFD information element"; + leaf id { type string; description - "Identifier of this VNFD information element. This attribute - shall be globally unique. The format will be defined in the - data model specification phase."; - reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; - } - leaf provider { - type string; - mandatory true; - description - "Provider of the VNF and of the VNFD"; + "Unique identifier of this VDU in VNFD."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, Vdu information element"; } - leaf product-name { + + leaf name { type string; mandatory true; description - "Name to identify the VNF Product. Invariant for the VNF - Product lifetime."; + "Human readable name of the VDU."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, Vdu information element"; } - leaf software-version { + + leaf description { type string; - mandatory true; description - "Software version of the VNF. This is changed when there is - any change to the software that is included in the VNF - Package"; + "Human readable description of the VDU."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, Vdu information element"; } - leaf version { - type string; - mandatory true; + + list int-cpd { + key "id"; + min-elements 1; description - "Identifies the version of the VNFD"; + "A internal-connection-point element is a type of + connection point and describes network connectivity + between a VDU instance and an internal Virtual Link or + an external connection point."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, Vdu information element"; + + leaf int-virtual-link-desc { + type leafref { + path "../../../int-virtual-link-desc/id"; + } + description + "Reference of the internal VLD which this internal CPD + connects to."; + reference + "GS NFV IFA011: Section 7.1.6.4, VduCpd information + element"; + } + + leaf bitrate-requirement { + type uint64; + units "Mbps"; + description + "Bitrate requirement on this CP."; + reference + "GS NFV IFA011: Section 7.1.6.4, VduCpd information + element."; + } + uses virtual-network-interface-requirements; + + leaf nicio-requirements { + type leafref { + path "../../../virtual-compute-desc/id"; + } + description + "This references (couples) the CPD with any logical node I/O + requirements (for network devices) that may have been + created. Linking these attributes is necessary so that so + that I/O requirements that need to be articulated at the + logical node level can be associated with the network + interface requirements associated with the CPD."; + reference + "GS NFV-IFA011: Section 7.1.6.6, + VirtualNetworkInterfaceRequirements information element"; + } + + leaf-list order { + type uint32; + description + "The order of the NIC to be assigned on the compute + instance (e.g. 2 for eth2). + + Note: when binding more than one port to a single + compute (aka multi vNICs) and ordering is desired, it + is mandatory that all ports will be set with an order + value. The order values shall represent a positive, + arithmetic progression that starts with 0 (i.e. 0, 1, + 2,..., n). + + If the property is not present, it shall be left to the + VIM to assign a value when creating the instance."; + reference + "GS NFV IFA011: Section 7.1.6.4, VduCpd information + element."; + } + uses cpd; + + leaf security-group-rule-id { + type leafref { + path "../../../security-group-rule/id"; + } + description + "Reference of the security group rules bound to this + CPD."; + reference + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; + } } - leaf product-info-name { - type string; + + leaf virtual-compute-desc { + type leafref { + path "../../virtual-compute-desc/id"; + } + must "../../virtual-compute-desc[id=current()]/" + + "virtual-memory/size >=" + + "../../sw-image-desc[id=current()/" + + "../sw-image-desc]/min-ram" { + } description - "Human readable name of the VNFD. Can change - during the VNF Product lifetime."; + "Describes CPU, Memory and acceleration requirements of + the Virtualisation Container realizing this VDU."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, VDU information + element, and Section 7.1.9.2.2, VirtualComputeDesc + information element."; } - leaf product-info-description { - type string; + + leaf-list virtual-storage-desc { + type leafref { + path "../../virtual-storage-desc/id"; + } description - "Human readable description of the VNFD. Can change during - the VNF Product lifetime."; + "Describes storage requirements for a VirtualStorage + instance attached to the virtualisation container + created from virtualComputeDesc defined for this VDU."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, VDU information + element, and Section 7.1.9.4, Information elements + related to Virtual Storage."; } - leaf-list vnfm-info { - type string; - min-elements 1; + + list boot-order { + ordered-by user; + key "key"; + + leaf key { + type uint32; + } + + leaf value { + type leafref { + path "../../virtual-storage-desc"; + } + } description - "Identifies VNFM(s) compatible with the VNF described in - this version of the VNFD."; + "The key indicates the boot index (lowest index defines + highest boot priority). The Value references a descriptor + from which a valid boot device is created e.g. + VirtualStorageDesc from which a VirtualStorage instance + is created. + + Editor's note: The boot-order node requires further + study."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, Vdu information + element."; } - leaf localization-language { - type string; + + leaf sw-image-desc { + type leafref { + path "../../sw-image-desc/id"; + } description - "Information about the language of the VNF."; + "Describes the software image which is directly loaded on + the virtualisation container realising this Vdu."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, Vdu information + element."; } - leaf default-localization-language { - when "../localization-language"; + + leaf-list nfvi-constraint { type string; description - "Default localization language that is instantiated if no - information about selected localization language is - available. Shall be present if 'localization-language' - is present and shall be absent otherwise."; + "Describes constraints on the NFVI for the VNFC + instance(s) created from this Vdu. For example, aspects + of a secure hosting environment for the VNFC instance + that involve additional entities or processes."; reference - "GS NFV-IFA011: Section 7.1.2, VNFD information element"; + "GS NFV IFA011: Section 7.1.6.2, VDU Information + element."; } - list vdu { + list monitoring-parameter { key "id"; - min-elements 1; - description - "The Virtualisation Deployment Unit (VDU) is a construct supporting - the description of the deployment and operational behaviour of a - VNF component, or the entire VNF if it was not componentized in - components."; - reference - "GS NFV IFA011: Section 7.1.2, VNFD information element"; leaf id { type string; description - "Unique identifier of this VDU in VNFD."; + "Unique identifier of the monitoring parameter."; reference - "GS NFV IFA011: Section 7.1.6.2, Vdu information element"; + "GS NFV IFA011: Section 7.1.11.3, MonitoringParameter + information element."; } - leaf name { + uses monitoring-parameter; + } + + list configurable-properties { + key "key"; + leaf key { type string; - mandatory true; - description - "Human readable name of the VDU."; - reference - "GS NFV IFA011: Section 7.1.6.2, Vdu information element"; } - leaf description { + leaf value { type string; - description - "Human readable description of the VDU."; - reference - "GS NFV IFA011: Section 7.1.6.2, Vdu information element"; } - list int-cpd { - key "id"; - min-elements 1; + description + "It provides VNFC configurable properties that can be + modified using the ModifyVnfInfo operation."; + reference + "GS NFV IFA011: Section 7.1.6.7, + VnfcConfigurableProperties Information element."; + } + + leaf boot-data { + type string; + description + "Contains a string or a URL to a file contained in the + VNF package used to customize a virtualised compute + resource at boot time. The bootData may contain variable + parts that are replaced by deployment specific values + before being sent to the VIM."; + reference + "GS NFV IFA011: Section 7.1.6.7, + VnfcConfigurableProperties Information element."; + } + } + + list virtual-compute-desc { + key "id"; + description + "Defines descriptors of virtual compute resources to be + used by the VNF."; + leaf id { + type string; + description + "Unique identifier of this VirtualComputeDesc in the + VNFD."; + reference + "GS NFV IFA011: Section 7.1.9.2, Information elements + related to Virtual CPU."; + } + + list logical-node { + key "id"; + + leaf id { + type string; description - "A internal-connection-point element is a type of - connection point and describes network connectivity - between a VDU instance and an internal Virtual Link or - an external connection point."; + "Identifies this set of logical node requirements."; reference - "GS NFV IFA011: Section 7.1.6.2, Vdu information element"; + "GS NFV IFA011: Section 7.1.9.6, LogicalNodeRequirements + Information elements."; + } - leaf int-virtual-link-desc { - type leafref { - path "../../../nfv:int-virtual-link-desc/nfv:id"; - } - description - "Reference of the internal VLD which this internal CPD - connects to."; - reference - "GS NFV IFA011: Section 7.1.6.4, VduCpd information - element"; - } + list requirement-detail { + key "key"; - leaf bitrate-requirement { - type uint64; - units "Mbps"; - description - "Bitrate requirement on this CP."; - reference - "GS NFV IFA011: Section 7.1.6.4, VduCpd information - element."; - } - uses virtual-network-interface-requirements; - leaf-list order { - type uint32; - description - "The order of the NIC to be assigned on the compute - instance (e.g. 2 for eth2). - - Note: when binding more than one port to a single - compute (aka multi vNICs) and ordering is desired, it - is mandatory that all ports will be set with an order - value. The order values shall represent a positive, - arithmetic progression that starts with 0 (i.e. 0, 1, - 2,..., n). - - If the property is not present, it shall be left to the - VIM to assign a value when creating the instance."; - reference - "GS NFV IFA011: Section 7.1.6.4, VduCpd information - element."; - } - uses cpd; - } - leaf virtual-compute-desc { - type leafref { - path "../../nfv:virtual-compute-desc/nfv:id"; + leaf key { + type string; } - must "../../nfv:virtual-compute-desc[id=current()]/" + - "nfv:virtual-memory/size >=" + - "../../nfv:sw-image-desc[id=current()/" + - "../sw-image-desc]/min-ram" { + + leaf value { + type string; } description - "Describes CPU, Memory and acceleration requirements of - the Virtualisation Container realizing this VDU."; + "The logical node-level compute, memory and I/O + requirements. An array of key-value pairs that + articulate the deployment requirements. + + This could include the number of CPU cores on this + logical node, a memory configuration specific to a + logical node (e.g. such as available in the Linux + kernel via the libnuma library) or a requirement + related to the association of an I/O device with the + logical node."; reference - "GS NFV IFA011: Section 7.1.6.2, VDU information - element, and Section 7.1.9.2.2, VirtualComputeDesc + "GS NFV IFA011: Section 7.1.9.6, LogicalNodeRequirements information element."; } + description + "The logical node requirements."; + reference + "GS NFV IFA011: Section 7.1.9.2, VirtualComputeDesc + information element."; + } - leaf-list virtual-storage-desc { - type leafref { - path "../../nfv:virtual-storage-descriptor/" + - "nfv:id"; - } + list request-additional-capability { + key "name"; + + leaf name { + type string; description - "Describes storage requirements for a VirtualStorage - instance attached to the virtualisation container - created from virtualComputeDesc defined for this VDU."; + "Identifies a requested additional capability for the + VDU. ETSI GS NFV-IFA 002 [i.1] describes acceleration + capabilities."; reference - "GS NFV IFA011: Section 7.1.6.2, VDU information - element, and Section 7.1.9.4, Information elements - related to Virtual Storage."; + "GS NFV IFA011: Section 7.1.9.5, + RequestedAdditionalCapabilityData Information element."; } - list boot-order { - ordered-by user; - key "key"; - leaf key { - type uint32; - } - leaf value { - type leafref { - path "../../nfv:virtual-storage-desc"; - } - } - description - "The key indicates the boot index (lowest index defines - highest boot priority). The Value references a descriptor - from which a valid boot device is created e.g. - VirtualStorageDesc from which a VirtualStorage instance - is created. - Editor's note: The boot-order node requires further - study."; + leaf support-mandatory { + type boolean; + description + "Indicates whether the requested additional capability + is mandatory for successful operation."; reference - "GS NFV IFA011: Section 7.1.6.2, Vdu information + "GS NFV IFA011: Section 7.1.9.5, + RequestedAdditionalCapabilityData Information element."; } - leaf sw-image-desc { - type leafref { - path "../../sw-image-desc/id"; - } + + leaf min-version { + type string; description - "Describes the software image which is directly loaded on - the virtualisation container realising this Vdu."; + "Identifies the minimum version of the requested + additional capability."; reference - "GS NFV IFA011: Section 7.1.6.2, Vdu information - element."; + "GS NFV IFA011: Section 7.1.9.5, + RequestedAdditionalCapabilityData Information element."; } - leaf-list nfvi-constraint { + + leaf preferred-version { type string; description - "Describes constraints on the NFVI for the VNFC - instance(s) created from this Vdu. For example, aspects - of a secure hosting environment for the VNFC instance - that involve additional entities or processes."; + "Identifies the preferred version of the requested + additional capability."; reference - "GS NFV IFA011: Section 7.1.6.2, VDU Information - element."; - } - list monitoring-parameter { - key "id"; - leaf id { - type string; - description - "Unique identifier of the monitoring parameter."; - reference - "GS NFV IFA011: Section 7.1.11.3, MonitoringParameter - information element."; - } - uses monitoring-parameter; + "GS NFV IFA011: Section 7.1.9.5, + RequestedAdditionalCapabilityData Information element."; } - list configurable-properties { + + list target-performance-parameters { key "key"; + leaf key { type string; } + leaf value { type string; } description - "It provides VNFC configurable properties that can be - modified using the ModifyVnfInfo operation."; - reference - "GS NFV IFA011: Section 7.1.6.7, - VnfcConfigurableProperties Information element."; - } - leaf boot-data { - type string; - description - "Contains a string or a URL to a file contained in the - VNF package used to customize a virtualised compute - resource at boot time. The bootData may contain variable - parts that are replaced by deployment specific values - before being sent to the VIM."; + "Identifies specific attributes, dependent on the + requested additional capability type."; reference - "GS NFV IFA011: Section 7.1.6.7, - VnfcConfigurableProperties Information element."; + "GS NFV IFA011: Section 7.1.9.5, + RequestedAdditionalCapabilityData Information element."; } } - list virtual-compute-desc { - key "id"; + leaf compute-requirements { + type string; description - "Defines descriptors of virtual compute resources to be - used by the VNF."; - leaf id { - type string; - description - "Unique identifier of this VirtualComputeDesc in the - VNFD."; - reference - "GS NFV IFA011: Section 7.1.9.2, Information elements - related to Virtual CPU."; - } - - list logical-node { - key "id"; + "Specifies compute requirements."; + reference + "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc + Information element."; + } - leaf id { - type string; - description - "Identifies this set of logical node requirements."; - reference - "GS NFV IFA011: Section 7.1.9.6, LogicalNodeRequirements - Information elements."; + container virtual-memory { + leaf size { + type decimal64 { + fraction-digits 1; + range "0..max"; } + units "GB"; + default 1; + description + "Amount of virtual memory in GB."; + reference + "GS NFV IFA011: Section 7.1.9.3, Information elements + related to Virtual Memory."; + } - list requirement-detail { - key "key"; - - leaf key { - type string; - } - leaf value { - type string; - } - description - "The logical node-level compute, memory and I/O - requirements. An array of key-value pairs that - articulate the deployment requirements. - - This could include the number of CPU cores on this - logical node, a memory configuration specific to a - logical node (e.g. such as available in the Linux - kernel via the libnuma library) or a requirement - related to the association of an I/O device with the - logical node."; - reference - "GS NFV IFA011: Section 7.1.9.6, LogicalNodeRequirements - information element."; - } + leaf over-subscription-policy { + type string; description - "The logical node requirements."; + "The memory core oversubscription policy in terms of + virtual memory to physical memory on the platform. + The cardinality can be 0 during the allocation + request, if no particular value is requested."; reference - "GS NFV IFA011: Section 7.1.9.2, VirtualComputeDesc - information element."; + "GS NFV IFA011: Section 7.1.9.3, Information elements + related to Virtual Memory."; } - list request-additional-capability { - key "name"; - leaf name { - type string; - description - "Identifies a requested additional capability for the - VDU. ETSI GS NFV-IFA 002 [i.1] describes acceleration - capabilities."; - reference - "GS NFV IFA011: Section 7.1.9.5, - RequestedAdditionalCapabilityData Information - element."; - } - leaf support-mandatory { - type boolean; - description - "Indicates whether the requested additional capability - is mandatory for successful operation."; - reference - "GS NFV IFA011: Section 7.1.9.5, - RequestedAdditionalCapabilityData Information - element."; - } + list vdu-mem-requirements { + key "key"; - leaf min-version { + leaf key { type string; - description - "Identifies the minimum version of the requested - additional capability."; - reference - "GS NFV IFA011: Section 7.1.9.5, - RequestedAdditionalCapabilityData Information - element."; } - leaf preferred-version { + leaf value { type string; - description - "Identifies the preferred version of the requested - additional capability."; - reference - "GS NFV IFA011: Section 7.1.9.5, - RequestedAdditionalCapabilityData Information - element."; - } - list target-performance-parameters { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Identifies specific attributes, dependent on the - requested additional capability type."; - reference - "GS NFV IFA011: Section 7.1.9.5, - RequestedAdditionalCapabilityData Information - element."; } + description + "Array of key-value pair requirements on the memory for + the VDU."; + reference + "GS NFV IFA011: Section 7.1.9.3.2, VirtualMemoryData + information element."; } - leaf compute-requirements { + leaf numa-enabled { + type boolean; + description + "It specifies the memory allocation to be cognisant of + the relevant process/core allocation. The cardinality + can be 0 during the allocation request, if no + particular value is requested."; + reference + "GS NFV IFA011: Section 7.1.9.3, Information elements + related to Virtual Memory."; + } + description + "The virtual memory of the virtualised compute."; + reference + "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc + Information element."; + } + + container virtual-cpu { + description + "The virtual CPU(s)of the virtualised compute."; + reference + "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc + Information element."; + + leaf cpu-architecture { type string; description - "Specifies compute requirements."; + "CPU architecture type. Examples are x86, ARM. The + cardinality can be 0 during the allocation request, + if no particular CPU architecture type is requested."; reference - "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc - Information element."; + "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData + information elements."; } - container virtual-memory { - leaf size { - type decimal64 { - fraction-digits 1; - range "0..max"; - } - units "GB"; - default 1; - description - "Amount of virtual memory in GB."; - reference - "GS NFV IFA011: Section 7.1.9.3, Information elements - related to Virtual Memory."; - } - leaf over-subscription-policy { - type string; - description - "The memory core oversubscription policy in terms of - virtual memory to physical memory on the platform. - The cardinality can be 0 during the allocation - request, if no particular value is requested."; - reference - "GS NFV IFA011: Section 7.1.9.3, Information elements - related to Virtual Memory."; - } - list vdu-mem-requirements { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Array of key-value pair requirements on the memory for - the VDU."; - reference - "GS NFV IFA011: Section 7.1.9.3.2, VirtualMemoryData - information element."; + leaf num-virtual-cpu { + type uint16 { + range "1..max"; } + default 1; + description + "Number of virtual CPUs."; + reference + "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData + information elements."; + } - leaf numa-enabled { - type boolean; - description - "It specifies the memory allocation to be cognisant of - the relevant process/core allocation. The cardinality - can be 0 during the allocation request, if no - particular value is requested."; - reference - "GS NFV IFA011: Section 7.1.9.3, Information elements - related to Virtual Memory."; - } + leaf clock { + type uint32; + units "MHz"; description - "The virtual memory of the virtualised compute."; + "Minimum virtual CPU clock rate (e.g. in MHz). The + cardinality can be 0 during the allocation request, + if no particular value is requested."; reference - "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc - Information element."; + "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData + information elements."; } - container virtual-cpu { + + leaf oversubscription-policy { + type string; description - "The virtual CPU(s)of the virtualised compute."; + "The CPU core oversubscription policy e.g. the relation + of virtual CPU cores to physical CPU cores/threads. + The cardinality can be 0 during the allocation request, + if no particular value is requested."; reference - "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc - Information element."; + "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData + information elements."; + } + + list vdu-cpu-requirements { + key "key"; - leaf cpu-architecture { + leaf key { type string; - description - "CPU architecture type. Examples are x86, ARM. The - cardinality can be 0 during the allocation request, - if no particular CPU architecture type is requested."; - reference - "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData - information elements."; - } - leaf num-virtual-cpu { - type uint16 { - range "1..max"; - } - default 1; - description - "Number of virtual CPUs."; - reference - "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData - information elements."; - } - leaf clock { - type uint32; - units "MHz"; - description - "Minimum virtual CPU clock rate (e.g. in MHz). The - cardinality can be 0 during the allocation request, - if no particular value is requested."; - reference - "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData - information elements."; } - leaf oversubscription-policy { + + leaf value { type string; + } + description + "Array of key-value pair requirements on the compute + (CPU) for the VDU."; + reference + "GS NFV IFA011: Section 7.1.9.3.2, VirtualCpuData + information element."; + } + + container pinning { + presence "Set to specify CPU pinning."; + + leaf policy { + default "dynamic"; + type enumeration { + enum "static"; + enum "dynamic"; + } description - "The CPU core oversubscription policy e.g. the relation - of virtual CPU cores to physical CPU cores/threads. - The cardinality can be 0 during the allocation request, - if no particular value is requested."; + "The policy can take values of 'static' or 'dynamic'. + In case of 'static' the virtual CPU cores are + requested to be allocated to logical CPU cores + according to the rules defined in + virtualCpuPinningRules. In case of 'dynamic' the + allocation of virtual CPU cores to logical CPU cores + is decided by the VIM. (e.g. SMT (Simultaneous + MultiThreading) requirements)."; reference - "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData - information elements."; + "GS NFV IFA011: Section 7.1.9.2.4, + VirtualCpuPinningData information element."; } - list vdu-cpu-requirements { + + list rule { + when "../policy = 'static'"; key "key"; + leaf key { type string; } @@ -655,2013 +733,2052 @@ submodule etsi-nfv-vnf { type string; } description - "Array of key-value pair requirements on the compute - (CPU) for the VDU."; + "A list of rules that should be considered during the + allocation of the virtual CPUs to logical CPUs in case + of 'static' virtualCpuPinningPolicy."; reference - "GS NFV IFA011: Section 7.1.9.3.2, VirtualCpuData - information element."; + "GS NFV IFA011: Section 7.1.9.2.4, + VirtualCpuPinningData information element."; } - container pinning { - presence "Set to specify CPU pinning."; - leaf policy { - default "dynamic"; - type enumeration { - enum "static"; - enum "dynamic"; - } - description - "The policy can take values of 'static' or 'dynamic'. - In case of 'static' the virtual CPU cores are - requested to be allocated to logical CPU cores - according to the rules defined in - virtualCpuPinningRules. In case of 'dynamic' the - allocation of virtual CPU cores to logical CPU cores - is decided by the VIM. (e.g. SMT (Simultaneous - MultiThreading) requirements)."; - reference - "GS NFV IFA011: Section 7.1.9.2.4, - VirtualCpuPinningData information element."; - } + description + "The virtual CPU pinning configuration for the + virtualised compute resource."; + reference + "GS NFV IFA011: Section 7.1.9.2.3, + VirtualCpuData information element."; + } + } + } - list rule { - when "../nfv:policy = 'static'"; - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "A list of rules that should be considered during the - allocation of the virtual CPUs to logical CPUs in case - of 'static' virtualCpuPinningPolicy."; - reference - "GS NFV IFA011: Section 7.1.9.2.4, - VirtualCpuPinningData information element."; - } - description - "The virtual CPU pinning configuration for the - virtualised compute resource."; - reference - "GS NFV IFA011: Section 7.1.9.2.3, - VirtualCpuData information element."; - } + list virtual-storage-desc { + key "id"; + description + "Storage requirements for a Virtual Storage instance + attached to the VNFC created from this VDU"; + leaf id { + type string; + description + "Unique identifier of this VirtualStorageDesc in the + VNFD."; + reference + "GS NFV IFA011: Section 7.1.9.4, Information elements + related to Virtual Storage."; + } + + leaf type-of-storage { + // Needed to be able to onboard images + default root-storage; + type identityref { + base storage-type; } + description + "Type of virtualised storage resource (e.g. volume, + object)."; + reference + "GS NFV IFA011: Section 7.1.9.4, Information elements + related to Virtual Storage."; } - list virtual-storage-descriptor { - key "id"; + leaf size-of-storage { + type uint64; + units "GB"; + default 0; description - "Storage requirements for a Virtual Storage instance - attached to the VNFC created from this VDU"; - leaf id { + "Size of virtualised storage resource (e.g. size of + volume, in GB)"; + reference + "GS NFV IFA011: Section 7.1.9.4, Information elements + related to Virtual Storage."; + } + + list vdu-storage-requirements { + key "key"; + + leaf key { type string; - description - "Unique identifier of this VirtualStorageDesc in the - VNFD."; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; } - leaf type-of-storage { - // Needed to be able to onboard images - default "root-storage"; - type identityref { - base storage-type; - } - description - "Type of virtualised storage resource (e.g. volume, - object)."; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; - } - leaf size-of-storage { - type uint64; - units "GB"; - default 0; - description - "Size of virtualised storage resource (e.g. size of - volume, in GB)"; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; - } - list vdu-storage-requirements { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Array of key-value pairs that articulate the storage - deployment requirements."; - reference - "GS NFV IFA011: Section 7.1.9.4.2, VirtualStorageDesc - information element."; + leaf value { + type string; } - leaf rdma-enabled { - type boolean; - description - "Indicate if the storage support RDMA."; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; + description + "Array of key-value pairs that articulate the storage + deployment requirements."; + reference + "GS NFV IFA011: Section 7.1.9.4.2, VirtualStorageDesc + information element."; + } + + leaf rdma-enabled { + type boolean; + description + "Indicate if the storage support RDMA."; + reference + "GS NFV IFA011: Section 7.1.9.4, Information elements + related to Virtual Storage."; + } + + leaf sw-image-desc { + type leafref { + path "../../sw-image-desc/id"; } - leaf sw-image-desc { - type leafref { - path "../../sw-image-desc/id"; - } - must "../nfv:size-of-storage >=" + - "../../nfv:sw-image-desc[id=current()]/min-disk" { - } - description - "Software image to be loaded on the VirtualStorage - resource created based on this VirtualStorageDesc."; - reference - "GS NFV IFA011: Section 7.1.9.4, Information elements - related to Virtual Storage."; + must "../size-of-storage >=" + + "../../sw-image-desc[id=current()]/min-disk" { } + description + "Software image to be loaded on the VirtualStorage + resource created based on this VirtualStorageDesc."; + reference + "GS NFV IFA011: Section 7.1.9.4, Information elements + related to Virtual Storage."; } + } - list sw-image-desc { - key "id"; + list sw-image-desc { + key "id"; + description + "Defines descriptors of software images to be used by the + VNF."; + reference + "GS NFV IFA011: Section 7.1.2, VNFD Information element."; + + leaf id { + type string; description - "Defines descriptors of software images to be used by the - VNF."; + "The identifier of this software image."; reference - "GS NFV IFA011: Section 7.1.2, VNFD Information element."; - leaf id { - type string; - description - "The identifier of this software image."; - reference - "GS NFV IFA011: Section 7.1.6.5, SwImageDesc - information element"; - } - leaf name { + "GS NFV IFA011: Section 7.1.6.5, SwImageDesc information + element"; + } + + leaf name { + mandatory true; + type string; + description + "The name of this software image."; + reference + "GS NFV IFA011: Section 7.1.6.5 SwImageDesc + information element."; + } + + leaf version { + mandatory true; + type string; + description + "The version of this software image."; + reference + "GS NFV IFA011: Section 7.1.6.5 SwImageDesc + information element."; + } + + container checksum { + + leaf algorithm { mandatory true; - type string; + type identityref { + base checksum-algorithm; + } description - "The name of this software image."; + "Species the algorithm used to obtain the checksum + value."; reference - "GS NFV IFA011: Section 7.1.6.5 SwImageDesc + "GS NFV IFA011: Section 7.1.6.10 ChecksumData information element."; } - leaf version { - mandatory true; + leaf hash { + mandatory true; type string; description - "The version of this software image."; + "Contains the result of applying the algorithm + indicated by the algorithm attribute to the data to + which this ChecksumData refers."; reference - "GS NFV IFA011: Section 7.1.6.5 SwImageDesc + "GS NFV IFA011: Section 7.1.6.10 ChecksumData information element."; } + description + "The checksum of the software image file."; + reference + "GS NFV IFA011: Section 7.1.6.5 SwImageDesc + information element."; + } - container checksum { - - leaf algorithm { - mandatory true; - type identityref { - base checksum-algorithm; - } + leaf container-format { + default "bare"; + type enumeration { + enum "aki" { description - "Species the algorithm used to obtain the checksum - value."; - reference - "GS NFV IFA011: Section 7.1.6.10 ChecksumData - information element."; - } - - leaf hash { - mandatory true; - type string; - description - "Contains the result of applying the algorithm - indicated by the algorithm attribute to the data to - which this ChecksumData refers."; - reference - "GS NFV IFA011: Section 7.1.6.10 ChecksumData - information element."; - } - description - "The checksum of the software image file."; - reference - "GS NFV IFA011: Section 7.1.6.5 SwImageDesc - information element."; - } - - leaf container-format { - default "bare"; - type enumeration { - enum "aki" { - description - "An Amazon kernel image."; - } - enum "ami" { - description - "An Amazon machine image."; - } - enum "ari" { - description - "An Amazon ramdisk image."; - } - enum "bare" { - description - "The image does not have a container or metadata - envelope."; - } - enum "docker" { - description - "A docker container format."; - } - enum "ova" { - description - "An OVF package in a tarfile."; - } - enum "ovf" { - description - "The OVF container format."; - } + "An Amazon kernel image."; + } + enum "ami" { + description + "An Amazon machine image."; + } + enum "ari" { + description + "An Amazon ramdisk image."; + } + enum "bare" { + description + "The image does not have a container or metadata + envelope."; + } + enum "docker" { + description + "A docker container format."; + } + enum "ova" { + description + "An OVF package in a tarfile."; + } + enum "ovf" { + description + "The OVF container format."; } - description - "The container format describes the container file - format in which software image is provided."; - reference - "GS NFV IFA011: Section 7.1.6.5 SwImageDesc - information element."; } + description + "The container format describes the container file + format in which software image is provided."; + reference + "GS NFV IFA011: Section 7.1.6.5 SwImageDesc + information element."; + } - leaf disk-format { - default "qcow2"; - type enumeration { - enum "aki" { - description - "An Amazon kernel image."; - } - enum "ami" { - description - "An Amazon machine image."; - } - enum "ari" { - description - "An Amazon ramdisk image."; - } - enum "iso" { - description - "An archive format for the data contents of an - disk, such as CD-ROM."; - } - enum "qcow2" { - description - "Supported by the QEMU emulator that can expand - dynamically and supports Copy on Write."; - } - enum "raw" { - description - "An unstructured disk image format; if you have a - file without an extension it is possibly a raw - format."; - } - enum "vdi" { - description - "Supported by VirtualBox virtual machine monitor - and the QEMU emulator."; - } - enum "vhd" { - description - "The VHD disk format, a common disk format used by - virtual machine monitors from VMware, Xen, - Microsoft, VirtualBox, and others."; - } - enum "vhdx" { - description - "The VHDX disk format, an enhanced version of the - VHD format, which supports larger disk sizes among - other features."; - } - enum "vmdk" { - description - "Common disk format supported by many common virtual - machine monitors."; - } + leaf disk-format { + default "qcow2"; + type enumeration { + enum "aki" { + description + "An Amazon kernel image."; + } + enum "ami" { + description + "An Amazon machine image."; + } + enum "ari" { + description + "An Amazon ramdisk image."; + } + enum "iso" { + description + "An archive format for the data contents of an + disk, such as CD-ROM."; + } + enum "qcow2" { + description + "Supported by the QEMU emulator that can expand + dynamically and supports Copy on Write."; + } + enum "raw" { + description + "An unstructured disk image format; if you have a + file without an extension it is possibly a raw + format."; + } + enum "vdi" { + description + "Supported by VirtualBox virtual machine monitor + and the QEMU emulator."; + } + enum "vhd" { + description + "The VHD disk format, a common disk format used by + virtual machine monitors from VMware, Xen, + Microsoft, VirtualBox, and others."; + } + enum "vhdx" { + description + "The VHDX disk format, an enhanced version of the + VHD format, which supports larger disk sizes among + other features."; + } + enum "vmdk" { + description + "Common disk format supported by many common virtual + machine monitors."; } - description - "The disk format of a software image is the format of - the underlying disk image."; } + description + "The disk format of a software image is the format of + the underlying disk image."; + } - leaf min-disk { - type uint64; - units "GB"; - default 0; - description - "The minimal disk size requirement for this software - image. The value of the 'size of storage' attribute - of the VirtualStorageDesc referencing this - SwImageDesc shall not be smaller than the value of - minDisk."; - reference - "GS NFV IFA011: Section 7.1.6.5, SwImageDesc - information element."; - } + leaf min-disk { + type uint64; + units "GB"; + default 0; + description + "The minimal disk size requirement for this software + image. The value of the 'size of storage' attribute + of the VirtualStorageDesc referencing this + SwImageDesc shall not be smaller than the value of + minDisk."; + reference + "GS NFV IFA011: Section 7.1.6.5, SwImageDesc + information element."; + } - leaf min-ram { - type decimal64 { - fraction-digits 1; - range "0..max"; - } - units "GB"; - default 0; - description - "The minimal RAM requirement for this software image. - The value of the 'size' attribute of - VirtualMemoryData of the Vdu referencing this - SwImageDesc shall not be smaller than the value of - minRam."; - reference - "GS NFV IFA011: Section 7.1.6.5, SwImageDesc - information element."; + leaf min-ram { + type decimal64 { + fraction-digits 1; + range "0..max"; } + units "GB"; + default 0; + description + "The minimal RAM requirement for this software image. + The value of the 'size' attribute of + VirtualMemoryData of the Vdu referencing this + SwImageDesc shall not be smaller than the value of + minRam."; + reference + "GS NFV IFA011: Section 7.1.6.5, SwImageDesc + information element."; + } - leaf size { - mandatory true; - type uint64; - units "GB"; - description - "The size of this software image."; - reference - "GS NFV IFA011: Section 7.1.6.5, SwImageDesc - information element."; - } + leaf size { + mandatory true; + type uint64; + units "GB"; + description + "The size of this software image."; + reference + "GS NFV IFA011: Section 7.1.6.5, SwImageDesc + information element."; + } - leaf image { - default "."; - type inet:uri; - description - "This is a reference to the actual software image. - The reference can be relative to the root of the VNF - Package or can be a URL"; - reference - "GS NFV IFA011: Section 7.1.6.5, SwImageDesc - information element."; - } + leaf image { + default "."; + type inet:uri; + description + "This is a reference to the actual software image. + The reference can be relative to the root of the VNF + Package or can be a URL"; + reference + "GS NFV IFA011: Section 7.1.6.5, SwImageDesc + information element."; + } - leaf operating-system { - type string; - description - "Identifies the operating system used in the software - image. This attribute may also identify if a 32 bit - or 64 bit software image is used."; - reference - "GS NFV IFA011: Section 7.1.6.5, SwImageDesc - information element."; - } + leaf operating-system { + type string; + description + "Identifies the operating system used in the software + image. This attribute may also identify if a 32 bit + or 64 bit software image is used."; + reference + "GS NFV IFA011: Section 7.1.6.5, SwImageDesc + information element."; + } - leaf-list supported-virtualization-environment { - type string; - description - "Identifies the virtualisation environments - (e.g. hypervisor) compatible with this software - image."; - reference - "GS NFV IFA011: Section 7.1.6.5, SwImageDesc - information element."; - } + leaf-list supported-virtualization-environment { + type string; + description + "Identifies the virtualisation environments + (e.g. hypervisor) compatible with this software + image."; + reference + "GS NFV IFA011: Section 7.1.6.5, SwImageDesc + information element."; } + } + + list int-virtual-link-desc { + key "id"; + description + "Represents the type of network connectivity mandated by the + VNF provider between two or more CPs which includes at + least one internal CP."; + reference + "GS NFV IFA011: Section 7.1.2, Vnfd information element."; - list int-virtual-link-desc { + leaf id { + type string; + description + "Unique identifier of this internal VLD in VNFD."; + reference + "GS NFV IFA011: Section 7.1.7.2, VnfVirtualLinkDesc + Information elements."; + } + + list flavour { key "id"; description - "Represents the type of network connectivity mandated by the - VNF provider between two or more CPs which includes at - least one internal CP."; + "Describes a specific flavour of the VL with specific + bitrate requirements."; reference - "GS NFV IFA011: Section 7.1.2, Vnfd information element."; + "GS NFV IFA011: Section 7.1.7.2, VnfVirtualLinkDesc + Information elements."; + leaf id { type string; description - "Unique identifier of this internal VLD in VNFD."; + "Identifies a flavour within a VnfVirtualLinkDesc."; reference - "GS NFV IFA011: Section 7.1.7.2, VnfVirtualLinkDesc - Information elements."; + "GS NFV IFA011: Section 7.1.8.5, VirtualLinkDescFlavour + information element."; } - list flavour { - key "id"; + container qos { + presence "VL QoS parameters"; description - "Describes a specific flavour of the VL with specific - bitrate requirements."; + "QoS of the VL."; reference - "GS NFV IFA011: Section 7.1.7.2, VnfVirtualLinkDesc - Information elements."; + "GS NFV IFA011: Section 7.1.8.5, VirtualLinkDescFlavour + information element."; - leaf id { - type string; + leaf latency { + type uint32; + units "ms"; + mandatory true; description - "Identifies a flavour within a VnfVirtualLinkDesc."; + "Specifies the maximum latency in ms."; reference - "GS NFV IFA011: Section 7.1.8.5, VirtualLinkDescFlavour - information element."; + "GS NFV IFA011: Section 7.1.8.10, QoS information + element."; } - container qos { - presence "VL QoS parameters"; + + leaf packet-delay-variation { + type uint32; + units "ms"; + mandatory true; description - "QoS of the VL."; + "Specifies the maximum jitter in ms."; reference - "GS NFV IFA011: Section 7.1.8.5, VirtualLinkDescFlavour - information element."; - - leaf latency { - type uint32; - units "ms"; - mandatory true; - description - "Specifies the maximum latency in ms."; - reference - "GS NFV IFA011: Section 7.1.8.10, QoS information - element."; - } - - leaf packet-delay-variation { - type uint32; - units "ms"; - mandatory true; - description - "Specifies the maximum jitter in ms."; - reference - "GS NFV IFA011: Section 7.1.8.10, QoS information - element."; - } - - leaf packet-loss-ratio { - type decimal64 { - fraction-digits "2"; - range "0..1.00"; - } - description - "Specifies the maximum packet loss ratio."; - reference - "GS NFV IFA011: Section 7.1.8.10, QoS information - element."; - } + "GS NFV IFA011: Section 7.1.8.10, QoS information + element."; } - } - - uses connectivity-type; - leaf-list test-access { - type string; - description - "Specifies test access facilities expected on the VL - (e.g. none, passive monitoring, or active (intrusive) - loopbacks at endpoints."; - reference - "GS NFV IFA011: Section 7.1.7.2, VnfVirtualLinkDesc - information element."; - } - leaf description { - type string; - description - "Provides human-readable information on the purpose of - the VL (e.g. control plane traffic)."; - reference - "GS NFV IFA011: Section 7.1.7.2, VnfVirtualLinkDesc - information element."; - } - list monitoring-parameters { - key "id"; - leaf id { - type string; + leaf packet-loss-ratio { + type decimal64 { + fraction-digits "2"; + range "0..1.00"; + } description - "Unique identifier of the monitoring parameter."; - reference - "GS NFV IFA011: Section 7.1.11.3, MonitoringParameter - information element."; + "Specifies the maximum packet loss ratio."; + reference + "GS NFV IFA011: Section 7.1.8.10, QoS information + element."; } - uses monitoring-parameter; } } - uses security-group-rule; - - list ext-cpd { - key "id"; - min-elements 1; + uses connectivity-type; + leaf-list test-access { + type string; description - "Describes an external interface exposed by this VNF enabling - connection with a Virual Link"; + "Specifies test access facilities expected on the VL + (e.g. none, passive monitoring, or active (intrusive) + loopbacks at endpoints."; reference - "GS NFV IFA011: Section 7.1.2, VNFD information element."; - - choice cp-connection { - leaf int-virtual-link-desc { - description - "Reference to the internal Virtual Link Descriptor (VLD) - to which CPs instantiated from this external CP - Descriptor (CPD) connect. Either intVirtualLinkDesc or - intCpd shall be present."; - type leafref { - path "../../nfv:int-virtual-link-desc/nfv:id"; - } - } - container int-cpd { - leaf vdu-id { - type leafref { - path "../../../vdu/id"; - } - } - leaf cpd { - type leafref { - path "deref(../vdu-id)/../int-cpd/id"; - } - } - } - } - uses virtual-network-interface-requirements; - uses cpd; + "GS NFV IFA011: Section 7.1.7.2, VnfVirtualLinkDesc + information element."; } - list df { - must "nfv:default-instantiation-level or " + - "count(nfv:instantiation-level) = 1"; - key "id"; - min-elements 1; + leaf description { + type string; description - "Describes a specific Deployment Flavour (DF) of a VNF with - specific requirements for capacity and performance."; + "Provides human-readable information on the purpose of + the VL (e.g. control plane traffic)."; reference - "GS NFV IFA011: Section 7.1.2, VNFD information element."; + "GS NFV IFA011: Section 7.1.7.2, VnfVirtualLinkDesc + information element."; + } + + list monitoring-parameters { + key "id"; + leaf id { type string; description - "Identifier of this DF within the VNFD."; + "Unique identifier of the monitoring parameter."; reference - "GS NFV IFA011: Section 7.1.8, Information elements - to the DeploymentFlavour."; - } - leaf description { - type string; - description - "Human readable description of the deployment flavour"; - reference - "GS NFV IFA011: Section 7.1.8, Information elements - to the DeploymentFlavour."; + "GS NFV IFA011: Section 7.1.11.3, MonitoringParameter + information element."; } - list vdu-profile { - key "id"; - min-elements 1; - description - "The Vduprofile describes additional instantiation data for - a given VDU used in a deployment flavour."; - reference - "GS NFV IFA011: Section 7.1.8, Information elements - to the DeploymentFlavour."; - leaf id { - type leafref { - path "../../../nfv:vdu/nfv:id"; - } - reference - "GS NFV IFA011: Section 7.1.8.3, VduProfile information - element."; - } - leaf min-number-of-instances { - type uint16; - default 1; - description - "Minimum number of instances of the VNFC based on this - VDU that is permitted to exist for this flavour."; - reference - "GS NFV IFA011: Section 7.1.8.3, VduProfile information - element."; - } - leaf max-number-of-instances { - type uint16; - default 1; - must ". >= ../nfv:min-number-of-instances"; - reference - "GS NFV IFA011: Section 7.1.8.3, VduProfile information - element."; - } - uses local-affinity-or-anti-affinity-rule; + uses monitoring-parameter; + } + } - list affinity-or-anti-affinity-group { - key "id"; + uses security-group-rule; - description - "Identifier(s) of the affinity or anti-affinity - group(s) the VDU belongs to."; - reference - "GS NFV IFA011: Section 7.1.8.3, VduProfile information - element."; - leaf id { - type leafref { - path "../../../" + - "nfv:affinity-or-anti-affinity-group/" + - "nfv:id"; - } - description - "Identifies an affinity or anti-affinity group to - which the affinity or anti-affinity rule applies."; - reference - "GS NFV IFA011: Section 7.1.8.12, AffinityOrAntiAffinity - information element."; - } - } - } + list ext-cpd { + key "id"; + min-elements 1; - list virtual-link-profile { - key "id flavour"; - description - "Defines the internal VLD along with additional data which - is used in this DF."; - reference - "GS NFV IFA011: Section 7.1.8.2, VnfDf information - element."; + description + "Describes an external interface exposed by this VNF enabling + connection with a Virual Link"; + reference + "GS NFV IFA011: Section 7.1.2, VNFD information element."; - leaf id { - type leafref { - path "../../../nfv:int-virtual-link-desc/nfv:id"; - } - description - "Uniquely identifies a Vnf VLD."; - reference - "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile - information element."; + choice cp-connection { + leaf int-virtual-link-desc { + description + "Reference to the internal Virtual Link Descriptor (VLD) + to which CPs instantiated from this external CP + Descriptor (CPD) connect. Either intVirtualLinkDesc or + intCpd shall be present."; + type leafref { + path "../../int-virtual-link-desc/id"; } + } - leaf flavour { + container int-cpd { + leaf vdu-id { type leafref { - path "deref(../../../ext-cpd/int-virtual-link-desc)" + - "/../flavour/id"; + path "../../../vdu/id"; } - description - "Identifies a flavour within the VnfVirtualLinkDesc."; - reference - "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile - information element."; } - uses local-affinity-or-anti-affinity-rule; - list affinity-or-anti-affinity-group { - key "id"; - leaf id { - type leafref { - path "../../../" + - "nfv:affinity-or-anti-affinity-group/" + - "nfv:id"; - } - } - description - "Identifier(s) of the affinity or anti-affinity - group(s) the VnfVirtualLinkDesc belongs to."; - reference - "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile - information element."; - } - - container max-bit-rate-requirements { - leaf root { - mandatory "true"; - type uint32; - description - "Throughput requirement of the link (e.g. bitrate of - E-Line, root bitrate of E-Tree, aggregate capacity - of E-LAN)."; - reference - "GS NFV IFA011: Section 7.1.8.6, - LinkBitrateRequirements information element."; - } - - leaf leaf { - type uint32; - description - "Throughput requirement of leaf connections to the - link when applicable to the connectivity type - (e.g. for E-Tree and E-LAN branches)."; - reference - "GS NFV IFA011: Section 7.1.8.6, - LinkBitrateRequirements information element."; - } - description - "Specifies the maximum bitrate requirements for a VL - instantiated according to this profile."; - reference - "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile - information element."; - } - - container min-bit-rate-requirements { - leaf root { - mandatory "true"; - type uint32; - description - "Throughput requirement of the link (e.g. bitrate of - E-Line, root bitrate of E-Tree, aggregate capacity - of E-LAN)."; - reference - "GS NFV IFA011: Section 7.1.8.6, - LinkBitrateRequirements information element."; - } - - leaf leaf { - type uint32; - description - "Throughput requirement of leaf connections to the - link when applicable to the connectivity type - (e.g. for E-Tree and E-LAN branches)."; - reference - "GS NFV IFA011: Section 7.1.8.6, - LinkBitrateRequirements information element."; + leaf cpd { + type leafref { + path "deref(../vdu-id)/../int-cpd/id"; } - description - "Specifies the minimum bitrate requirements for a VL - instantiated according to this profile."; - reference - "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile - information element."; } + } + } + uses virtual-network-interface-requirements; - container virtual-link-protocol-data { - leaf associated-layer-protocol { - type identityref { - base layer-protocol; - } - description - "One of the values of the attribute layerProtocol of - the ConnectivityType IE."; - reference - "GS NFV IFA011: Section 7.1.8.13, - VirtualLinkProtocolData information element."; - } - - container l2-protocol-data { - when "(../associated-layer-protocol = 'Ethernet') or " + - "(../associated-layer-protocol = 'MPLS') or " + - "(../associated-layer-protocol = 'ODU2') or " + - "(../associated-layer-protocol = 'Pseudo-Wire')"; - leaf name { - type string; - description - "Network name associated with this L2 protocol."; - reference - "GS NFV IFA011: Section 7.1.8.14, - L2ProtocolData information element."; - } - - leaf network-type { - type enumeration { - enum flat; - enum vlan; - enum vxlan; - enum gre; - } - description - "Specifies the network type for this L2 protocol. - Possible values: FLAT, VLAN, VXLAN, GRE."; - reference - "GS NFV IFA011: Section 7.1.8.14, - L2ProtocolData information element."; - } - - leaf vlan-transparent { - type boolean; - description - "Specifies whether to support VLAN transparency for - this L2 protocol or not."; - reference - "GS NFV IFA011: Section 7.1.8.14, - L2ProtocolData information element."; - } - - leaf mtu { - type uint16; - description - "Specifies the maximum transmission unit (MTU) value - for this L2 protocol."; - reference - "GS NFV IFA011: Section 7.1.8.14, - L2ProtocolData information element."; - } - description - "Specifies the L2 protocol data for this virtual link. - Shall be present when the associatedLayerProtocol - attribute indicates a L2 protocol and shall be absent - otherwise."; - reference - "GS NFV IFA011: Section 7.1.8.13, - VirtualLinkProtocolData information element."; - } - - container l3-protocol-data { - when "(../associated-layer-protocol = 'IPv4') or " + - "(../associated-layer-protocol = 'IPv6')"; - - leaf name { - type string; - description - "Network name associated with this L3 protocol."; - reference - "GS NFV IFA011: Section 7.1.8.15, - L3ProtocolData information element."; - } + leaf nicio-requirements { + type leafref { + path "../../virtual-compute-desc/id"; + } + description + "This references (couples) the CPD with any logical node I/O + requirements (for network devices) that may have been + created. Linking these attributes is necessary so that so + that I/O requirements that need to be articulated at the + logical node level can be associated with the network + interface requirements associated with the CPD."; + reference + "GS NFV-IFA011: Section 7.1.6.6, + VirtualNetworkInterfaceRequirements information element"; + } + uses cpd; - leaf ip-version { - type enumeration { - enum ipv4; - enum ipv6; - } - default "ipv4"; - description - "Specifies IP version of this L3 protocol. - Value: - • IPV4. - • IPV6."; - reference - "GS NFV IFA011: Section 7.1.8.15, - L3ProtocolData information element."; - } + leaf security-group-rule-id { + type leafref { + path "../../security-group-rule/id"; + } + description + "Reference of the security group rules bound to this + CPD."; + reference + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; + } + } - leaf cidr { - type string; - description - "Specifies the CIDR (Classless InterDomain Routing) - of this L3 protocol."; - reference - "GS NFV IFA011: Section 7.1.8.15, - L3ProtocolData information element."; - } + list df { + must "default-instantiation-level or " + + "count(instantiation-level) = 1"; + key "id"; + min-elements 1; + description + "Describes a specific Deployment Flavour (DF) of a VNF with + specific requirements for capacity and performance."; + reference + "GS NFV IFA011: Section 7.1.2, VNFD information element."; - leaf-list ip-allocation-pools { - type string; - description - "Specifies the allocation pools with start and end - IP addresses for this L3 protocol."; - reference - "GS NFV IFA011: Section 7.1.8.15, - L3ProtocolData information element."; - } + leaf id { + type string; + description + "Identifier of this DF within the VNFD."; + reference + "GS NFV IFA011: Section 7.1.8, Information elements + to the DeploymentFlavour."; + } - leaf gateway-ip { - type inet:ip-address; - description - "Specifies the gateway IP address for this L3 - protocol."; - reference - "GS NFV IFA011: Section 7.1.8.15, - L3ProtocolData information element."; - } + leaf description { + type string; + description + "Human readable description of the deployment flavour"; + reference + "GS NFV IFA011: Section 7.1.8, Information elements + to the DeploymentFlavour."; + } - leaf dhcp-enabled { - type boolean; - default "true"; - description - "Indicates whether DHCP (Dynamic Host Configuration - Protocol) is enabled or disabled for this L3 - protocol."; - reference - "GS NFV IFA011: Section 7.1.8.15, - L3ProtocolData information element."; - } + list vdu-profile { + key "id"; + min-elements 1; + description + "The Vduprofile describes additional instantiation data for + a given VDU used in a deployment flavour."; + reference + "GS NFV IFA011: Section 7.1.8, Information elements + to the DeploymentFlavour."; - leaf ipv6-address-mode { - when "../ip-version = 'ipv6'"; - type enumeration { - enum slaac; - enum dhcpv6-stateful; - enum dhcpv6-stateless; - } - description - "Specifies IPv6 address mode. Possible values: - • SLAAC. - • DHCPV6-STATEFUL. - • DHCPV6-STATELESS. - May be present when the value of the ipVersion - attribute is 'IPV6' and shall be absent otherwise."; - reference - "GS NFV IFA011: Section 7.1.8.15, - L3ProtocolData information element."; - } - description - "Specifies the L3 protocol data for this virtual link. - Shall be present when the associatedLayerProtocol - attribute indicates a L3 protocol and shall be absent - otherwise."; - reference - "GS NFV IFA011: Section 7.1.8.13, - VirtualLinkProtocolData information element."; - } - description - "Specifies the protocol data for a VL instantiated - according to this profile. Cardinality 0 is used when - no protocol data needs to be specified."; - reference - "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile - information element."; + leaf id { + type leafref { + path "../../../vdu/id"; } + reference + "GS NFV IFA011: Section 7.1.8.3, VduProfile information + element."; + } + + leaf min-number-of-instances { + type uint16; + default 1; + description + "Minimum number of instances of the VNFC based on this + VDU that is permitted to exist for this flavour."; + reference + "GS NFV IFA011: Section 7.1.8.3, VduProfile information + element."; + } + + leaf max-number-of-instances { + type uint16; + default 1; + must ". >= ../min-number-of-instances"; + reference + "GS NFV IFA011: Section 7.1.8.3, VduProfile information + element."; } + uses local-affinity-or-anti-affinity-rule; - list instantiation-level { + list affinity-or-anti-affinity-group { key "id"; - min-elements 1; - description - "Describes the various levels of resources that can be - used to instantiate the VNF using this flavour. - Examples: Small, Medium, Large. If there is only one - 'instantiationLevel' entry, it shall be treated as the - default instantiation level for this DF. - The InstantiationLevel information element describes a - given level of resources to be instantiated within a - deployment flavour in term of the number of VNFC instances - to be created from each VDU. - All the VDUs referenced in the level shall be part of the - corresponding deployment flavour and their number shall - be within the range (min/max) for this deployment flavour."; + description + "Identifier(s) of the affinity or anti-affinity + group(s) the VDU belongs to."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information element"; + "GS NFV IFA011: Section 7.1.8.3, VduProfile information + element."; leaf id { - type string; - description - "Uniquely identifies a level with the DF."; - reference - "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel - information element"; - } - leaf description { - type string; + type leafref { + path "../../../" + + "affinity-or-anti-affinity-group/id"; + } description - "Human readable description of the instantiation level"; + "Identifies an affinity or anti-affinity group to + which the affinity or anti-affinity rule applies."; reference - "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel - information element"; + "GS NFV IFA011: Section 7.1.8.12, AffinityOrAntiAffinity + information element."; } - list vdu-level { - key "vdu-id"; - min-elements 1; - description - "Sets the number of instances for the VDU in this - instantiation level."; - reference - "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel - information element"; + } + } - leaf vdu-id { - type leafref { - path "../../../../nfv:vdu/nfv:id"; - } - description - "Uniquely identifies a VDU."; - reference - "GS NFV IFA011: Section 7.1.8.9 VduLevel information - element"; - } - leaf number-of-instances { - type uint16; - must ". <= ../../../../nfv:df/" + - "nfv:vdu-profile[id=current()/../nfv:vdu-id]/" + - "nfv:max-number-of-instances"; - must ". >= ../../../../nfv:df/" + - "nfv:vdu-profile[id=current()/../nfv:vdu-id]/" + - "nfv:min-number-of-instances"; - default 1; - description - "Number of instances of VNFC based on this VDU to - deploy for this level."; - reference - "GS NFV IFA011: Section 7.1.8.9 VduLevel information - element"; - } - } - list scaling-info { - key "scaling-aspect-id"; - description - "The InstantiationLevel information element describes a - given level of resources to be instantiated within a - DF in term of the number of VNFC instances to be - created from each VDU."; - reference - "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel - information element"; + list virtual-link-profile { + key "id flavour"; + description + "Defines the internal VLD along with additional data which + is used in this DF."; + reference + "GS NFV IFA011: Section 7.1.8.2, VnfDf information + element."; - leaf scaling-aspect-id { - type leafref { - path "../../../nfv:scaling-aspect/nfv:id"; - } - description - "Identifier of the scaling aspect."; - reference - "GS NFV IFA011: Section 7.1.8.8 ScaleInfo information - element"; - } - leaf scale-level { - type uint32; - description - "The scale level, greater than or equal to 0."; - reference - "GS NFV IFA011: Section 7.1.8.8 ScaleInfo information - element"; - } + leaf id { + type leafref { + path "../../../int-virtual-link-desc/id"; } + description + "Uniquely identifies a Vnf VLD."; + reference + "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile + information element."; } - leaf default-instantiation-level { + + leaf flavour { type leafref { - path "../nfv:instantiation-level/nfv:id"; + path "deref(../../../ext-cpd/int-virtual-link-desc)" + + "/../flavour/id"; } description - "This attribute references the 'instantiationLevel' - entry which defines the default instantiation level for - this DF. It shall be present if there are multiple - 'instantiationLevel' entries."; + "Identifies a flavour within the VnfVirtualLinkDesc."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information - element"; + "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile + information element."; } - leaf-list supported-operation { - type identityref { - base supported-operation; + uses local-affinity-or-anti-affinity-rule; + + list affinity-or-anti-affinity-group { + key "id"; + leaf id { + type leafref { + path "../../../affinity-or-anti-affinity-group/id"; + } } description - "Indicates which operations are available for this DF via - the VNF LCM interface. Instantiate VNF, Query VNF and - Terminate VNF are supported in all DF and therefore - need not be included in this list."; + "Identifier(s) of the affinity or anti-affinity + group(s) the VnfVirtualLinkDesc belongs to."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information - element"; + "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile + information element."; } - container lcm-operations-configuration { + + container max-bit-rate-requirements { + leaf root { + mandatory "true"; + type uint32; + description + "Throughput requirement of the link (e.g. bitrate of + E-Line, root bitrate of E-Tree, aggregate capacity + of E-LAN)."; + reference + "GS NFV IFA011: Section 7.1.8.6, + LinkBitrateRequirements information element."; + } + + leaf leaf { + type uint32; + description + "Throughput requirement of leaf connections to the + link when applicable to the connectivity type + (e.g. for E-Tree and E-LAN branches)."; + reference + "GS NFV IFA011: Section 7.1.8.6, + LinkBitrateRequirements information element."; + } description - "This information element is a container for all - attributes that affect the invocation of the VNF - Lifecycle Management operations, structured by - operation."; + "Specifies the maximum bitrate requirements for a VL + instantiated according to this profile."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information - element"; + "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile + information element."; + } - container instantiate-vnf-op-config { - list parameter { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Array of KVP requirements for VNF-specific parameters - to be passed when invoking the InstantiateVnf - operation."; - reference - "GS NFV IFA011: Section 7.1.5.3 - InstantiateVnfOpConfig information element"; - } + container min-bit-rate-requirements { + leaf root { + mandatory "true"; + type uint32; description - "Configuration parameters for the InstantiateVnf - operation."; + "Throughput requirement of the link (e.g. bitrate of + E-Line, root bitrate of E-Tree, aggregate capacity + of E-LAN)."; reference - "GS NFV IFA011: Section 7.1.5.2 - VnfLcmOperationsConfiguration information element"; + "GS NFV IFA011: Section 7.1.8.6, + LinkBitrateRequirements information element."; } - container scale-vnf-op-config { + leaf leaf { + type uint32; description - "Configuration parameters for the ScaleVnf operation."; + "Throughput requirement of leaf connections to the + link when applicable to the connectivity type + (e.g. for E-Tree and E-LAN branches)."; reference - "GS NFV IFA011: Section 7.1.5.2 - VnfLcmOperationsConfiguration information element"; + "GS NFV IFA011: Section 7.1.8.6, + LinkBitrateRequirements information element."; + } + description + "Specifies the minimum bitrate requirements for a VL + instantiated according to this profile."; + reference + "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile + information element."; + } - list parameter { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Array of KVP requirements for VNFspecific parameters - to be passed when invoking the ScaleVnf operation."; - reference - "GS NFV IFA011: Section 7.1.5.4 ScaleVnfOpConfig - information element"; + container virtual-link-protocol-data { + leaf associated-layer-protocol { + type identityref { + base layer-protocol; } + description + "One of the values of the attribute layerProtocol of + the ConnectivityType IE."; + reference + "GS NFV IFA011: Section 7.1.8.13, + VirtualLinkProtocolData information element."; + } - leaf scaling-by-more-than-one-step-supported { - type boolean; - default false; + container l2-protocol-data { + when "(../associated-layer-protocol = 'Ethernet') or " + + "(../associated-layer-protocol = 'MPLS') or " + + "(../associated-layer-protocol = 'ODU2') or " + + "(../associated-layer-protocol = 'Pseudo-Wire')"; + + leaf name { + type string; description - "Signals whether passing a value larger than one in - the numScalingSteps parameter of the ScaleVnf - operation is supported by this VNF. - Default is FALSE, i.e. 'not supported'."; + "Network name associated with this L2 protocol."; reference - "GS NFV IFA011: Section 7.1.5.4 - ScaleVnfOpConfig information element"; + "GS NFV IFA011: Section 7.1.8.14, + L2ProtocolData information element."; } - } - container scale-vnf-to-level-op-config { - description - "This information element defines attributes that - affect the invocation of the ScaleVnfToLevel - operation."; - reference - "GS NFV IFA011: Section 7.1.5.2 - VnfLcmOperationsConfiguration information element"; - - list parameter { - key "key"; - leaf key { - type string; - } - leaf value { - type string; + leaf network-type { + type enumeration { + enum flat; + enum vlan; + enum vxlan; + enum gre; } description - "Array of KVP requirements for VNF-specific parameters - to be passed when invoking the ScaleVnfToLevel - operation."; + "Specifies the network type for this L2 protocol. + Possible values: FLAT, VLAN, VXLAN, GRE."; reference - "GS NFV IFA011: Section 7.1.5.5 - ScaleVnfToLevelOpConfig information element"; + "GS NFV IFA011: Section 7.1.8.14, + L2ProtocolData information element."; } - leaf arbitrary-target-levels-supported { + leaf vlan-transparent { type boolean; - default "false"; description - "Signals whether scaling according to the parameter - 'scaleInfo' is supported by this VNF."; + "Specifies whether to support VLAN transparency for + this L2 protocol or not."; reference - "GS NFV IFA011: Section 7.1.5.5 - ScaleVnfToLevelOpConfig information element"; + "GS NFV IFA011: Section 7.1.8.14, + L2ProtocolData information element."; } - } - container heal-vnf-op-config { + leaf mtu { + type uint16; + description + "Specifies the maximum transmission unit (MTU) value + for this L2 protocol."; + reference + "GS NFV IFA011: Section 7.1.8.14, + L2ProtocolData information element."; + } description - "This information element defines attributes that - affect the invocation of the HealVnf operation."; + "Specifies the L2 protocol data for this virtual link. + Shall be present when the associatedLayerProtocol + attribute indicates a L2 protocol and shall be absent + otherwise."; reference - "GS NFV IFA011: Section 7.1.5.2 - VnfLcmOperationsConfiguration information element"; + "GS NFV IFA011: Section 7.1.8.13, + VirtualLinkProtocolData information element."; + } - list parameter { - key "key"; + container l3-protocol-data { + when "(../associated-layer-protocol = 'IPv4') or " + + "(../associated-layer-protocol = 'IPv6')"; - leaf key { - type string; - } - leaf value { - type string; + leaf name { + type string; + description + "Network name associated with this L3 protocol."; + reference + "GS NFV IFA011: Section 7.1.8.15, + L3ProtocolData information element."; + } + + leaf ip-version { + type enumeration { + enum ipv4; + enum ipv6; } + default "ipv4"; description - "Array of KVP requirements for VNF-specific parameters - to be passed when invoking the HealVnf operation."; + "Specifies IP version of this L3 protocol. + Value: + • IPV4. + • IPV6."; reference - "GS NFV IFA011: Section 7.1.5.6 HealVnfOpConfig - information element"; + "GS NFV IFA011: Section 7.1.8.15, + L3ProtocolData information element."; } - leaf-list cause { + leaf cidr { type string; description - "Supported 'cause' parameter values."; + "Specifies the CIDR (Classless InterDomain Routing) + of this L3 protocol."; reference - "GS NFV IFA011: Section 7.1.5.6 HealVnfOpConfig - information element"; + "GS NFV IFA011: Section 7.1.8.15, + L3ProtocolData information element."; } - } - container terminate-vnf-op-config { - description - "This information element defines attributes that - affect the invocation of the TerminateVnf operation."; - reference - "GS NFV IFA011: Section 7.1.5.2 - VnfLcmOperationsConfiguration information element"; + leaf-list ip-allocation-pools { + type string; + description + "Specifies the allocation pools with start and end + IP addresses for this L3 protocol."; + reference + "GS NFV IFA011: Section 7.1.8.15, + L3ProtocolData information element."; + } - leaf min-graceful-termination { - type yang:timeticks; - default "1"; + leaf gateway-ip { + type inet:ip-address; description - "Minimum timeout value for graceful termination of - a VNF instance."; + "Specifies the gateway IP address for this L3 + protocol."; reference - "GS NFV IFA011: Section 7.1.5.7 - TerminateVnfOpConfig information element"; + "GS NFV IFA011: Section 7.1.8.15, + L3ProtocolData information element."; } - leaf max-recommended-graceful-termination { - type yang:timeticks; + leaf dhcp-enabled { + type boolean; + default "true"; description - "Maximum recommended timeout value that can be needed - to gracefully terminate a VNF instance of a - particular type under certain conditions, such as - maximum load condition. This is provided by VNF - provider as information for the operator - facilitating the selection of optimal timeout value. - This value is not used as constraint."; + "Indicates whether DHCP (Dynamic Host Configuration + Protocol) is enabled or disabled for this L3 + protocol."; reference - "GS NFV IFA011: Section 7.1.5.7 - TerminateVnfOpConfig information element"; + "GS NFV IFA011: Section 7.1.8.15, + L3ProtocolData information element."; } - list parameter { - key "key"; - leaf key { - type string; - } - leaf value { - type string; + leaf ipv6-address-mode { + when "../ip-version = 'ipv6'"; + type enumeration { + enum slaac; + enum dhcpv6-stateful; + enum dhcpv6-stateless; } description - "Array of KVP requirements for VNF-specific parameters - to be passed when invoking the TerminateVnf - operation."; + "Specifies IPv6 address mode. Possible values: + • SLAAC. + • DHCPV6-STATEFUL. + • DHCPV6-STATELESS. + May be present when the value of the ipVersion + attribute is 'IPV6' and shall be absent otherwise."; reference - "GS NFV IFA011: Section 7.1.5.7 - TerminateVnfOpConfig information element"; + "GS NFV IFA011: Section 7.1.8.15, + L3ProtocolData information element."; + } + description + "Specifies the L3 protocol data for this virtual link. + Shall be present when the associatedLayerProtocol + attribute indicates a L3 protocol and shall be absent + otherwise."; + reference + "GS NFV IFA011: Section 7.1.8.13, + VirtualLinkProtocolData information element."; + } + description + "Specifies the protocol data for a VL instantiated + according to this profile. Cardinality 0 is used when + no protocol data needs to be specified."; + reference + "GS NFV IFA011: Section 7.1.8.4, VirtualLinkProfile + information element."; + } + } + + list instantiation-level { + key "id"; + min-elements 1; + description + "Describes the various levels of resources that can be + used to instantiate the VNF using this flavour. + Examples: Small, Medium, Large. If there is only one + 'instantiationLevel' entry, it shall be treated as the + default instantiation level for this DF. + + The InstantiationLevel information element describes a + given level of resources to be instantiated within a + deployment flavour in term of the number of VNFC instances + to be created from each VDU. + All the VDUs referenced in the level shall be part of the + corresponding deployment flavour and their number shall + be within the range (min/max) for this deployment flavour."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information element"; + + leaf id { + type string; + description + "Uniquely identifies a level with the DF."; + reference + "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel + information element"; + } + + leaf description { + type string; + description + "Human readable description of the instantiation level"; + reference + "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel + information element"; + } + + list vdu-level { + key "vdu-id"; + min-elements 1; + description + "Sets the number of instances for the VDU in this + instantiation level."; + reference + "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel + information element"; + + leaf vdu-id { + type leafref { + path "../../../../vdu/id"; } + description + "Uniquely identifies a VDU."; + reference + "GS NFV IFA011: Section 7.1.8.9 VduLevel information + element"; } - container operate-vnf-op-config { + leaf number-of-instances { + type uint16; + must ". <= ../../../../df/" + + "vdu-profile[id=current()/../vdu-id]/" + + "max-number-of-instances"; + must ". >= ../../../../df/" + + "vdu-profile[id=current()/../vdu-id]/" + + "min-number-of-instances"; + default 1; description - "This information element defines attributes that - affect the invocation of the OperateVnf operation."; + "Number of instances of VNFC based on this VDU to + deploy for this level."; reference - "GS NFV IFA011: Section 7.1.5.2 - VnfLcmOperationsConfiguration information element"; + "GS NFV IFA011: Section 7.1.8.9 VduLevel information + element"; + } + } - leaf min-graceful-stop-timeout { - type yang:timeticks; - default "1"; - description - "Minimum timeout value for graceful stop of a VNF - instance."; - reference - "GS NFV IFA011: Section 7.1.5.8 - OperateVnfOpConfig information element"; + list scaling-info { + key "scaling-aspect-id"; + description + "The InstantiationLevel information element describes a + given level of resources to be instantiated within a + DF in term of the number of VNFC instances to be + created from each VDU."; + reference + "GS NFV IFA011: Section 7.1.8.7 InstantiationLevel + information element"; + + leaf scaling-aspect-id { + type leafref { + path "../../../scaling-aspect/id"; } + description + "Identifier of the scaling aspect."; + reference + "GS NFV IFA011: Section 7.1.8.8 ScaleInfo information + element"; + } - leaf max-recommended-graceful-stop-timeout { - type yang:timeticks; - description - "Maximum recommended timeout value that can be - needed to gracefully stop a VNF instance of a - particular type under certain conditions, such as - maximum load condition. This is provided by VNF - provider as information for the operator facilitating - the selection of optimal timeout value. This value - is not used as constraint."; - reference - "GS NFV IFA011: Section 7.1.5.8 - OperateVnfOpConfig information element"; + leaf scale-level { + type uint32; + description + "The scale level, greater than or equal to 0."; + reference + "GS NFV IFA011: Section 7.1.8.8 ScaleInfo information + element"; + } + } + } + + leaf default-instantiation-level { + type leafref { + path "../instantiation-level/id"; + } + description + "This attribute references the 'instantiationLevel' + entry which defines the default instantiation level for + this DF. It shall be present if there are multiple + 'instantiationLevel' entries."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + } + + leaf-list supported-operation { + type identityref { + base supported-operation; + } + description + "Indicates which operations are available for this DF via + the VNF LCM interface. Instantiate VNF, Query VNF and + Terminate VNF are supported in all DF and therefore + need not be included in this list."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + } + + container lcm-operations-configuration { + description + "This information element is a container for all + attributes that affect the invocation of the VNF + Lifecycle Management operations, structured by + operation."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + + container instantiate-vnf-op-config { + list parameter { + key "key"; + + leaf key { + type string; } - list parameter { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Array of KVP requirements for VNF-specific parameters - to be passed when invoking the OperateVnf - operation."; - reference - "GS NFV IFA011: Section 7.1.5.8 - OperateVnfOpConfig information element"; + leaf value { + type string; } + description + "Array of KVP requirements for VNF-specific parameters + to be passed when invoking the InstantiateVnf + operation."; + reference + "GS NFV IFA011: Section 7.1.5.3 + InstantiateVnfOpConfig information element"; } + description + "Configuration parameters for the InstantiateVnf + operation."; + reference + "GS NFV IFA011: Section 7.1.5.2 + VnfLcmOperationsConfiguration information element"; + } - container change-vnf-flavour-op-config { - list parameter { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Array of KVP requirements for VNF-specific parameters - to be passed when invoking the OperateVnf - operation."; - reference - "GS NFV IFA011: Section 7.1.5.9 - ChangeVnfFlavour information element"; + container scale-vnf-op-config { + description + "Configuration parameters for the ScaleVnf operation."; + reference + "GS NFV IFA011: Section 7.1.5.2 + VnfLcmOperationsConfiguration information element"; + + list parameter { + key "key"; + + leaf key { + type string; + } + + leaf value { + type string; } description - "Configuration parameters for the ChangeVnfFlavour - operation."; + "Array of KVP requirements for VNFspecific parameters + to be passed when invoking the ScaleVnf operation."; reference - "GS NFV IFA011: Section 7.1.5.2 - VnfLcmOperationsConfiguration information element"; + "GS NFV IFA011: Section 7.1.5.4 ScaleVnfOpConfig + information element"; } - container change-ext-vnf-connectivity-op-config { - list parameter { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Array of KVP requirements for VNF-specific parameters - to be passed when invoking the - ChangeExtVnfConnectivity operation."; - reference - "GS NFV IFA011: Section 7.1.5.10 - ChangeExtVnfConnectivityOpConfig information - element"; - } + leaf scaling-by-more-than-one-step-supported { + type boolean; + default false; description - "Configuration parameters for the - ChangeExtVnfConnectivity operation."; + "Signals whether passing a value larger than one in + the numScalingSteps parameter of the ScaleVnf + operation is supported by this VNF. + Default is FALSE, i.e. 'not supported'."; reference - "GS NFV IFA011: Section 7.1.5.2 - VnfLcmOperationsConfiguration information element"; + "GS NFV IFA011: Section 7.1.5.4 + ScaleVnfOpConfig information element"; } } - list affinity-or-anti-affinity-group { - key "id"; + container scale-vnf-to-level-op-config { description - "The AffinityOrAntiAffinityGroup describes the affinity - or anti-affinity relationship applicable between the - virtualization containers to be created based on - different VDUs, or between internal VLs to be created - based on different VnfVirtualLinkDesc(s). - - Per VNF, the affinity/anti-affinity rules defined using - this information element, using the - LocalAffinityOrAntiAffinityRule information element, and - using the placement constraints in the - GrantLifecycleOperation as defined in ETSI GS NFV-IFA - 007 [i.3] should be conflict-free. In case of conflicts, - the placement constraints in the - GrantLifecycleOperation shall take precedence."; - + "This information element defines attributes that + affect the invocation of the ScaleVnfToLevel + operation."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information - element"; + "GS NFV IFA011: Section 7.1.5.2 + VnfLcmOperationsConfiguration information element"; - leaf id { - type string; + list parameter { + key "key"; + leaf key { + type string; + } + leaf value { + type string; + } description - "Identifies an affinity or anti-affinity group to which - the affinity or anti-affinity rule applies."; + "Array of KVP requirements for VNF-specific parameters + to be passed when invoking the ScaleVnfToLevel + operation."; reference - "GS NFV IFA011: Section 7.1.8.12 - AffinityOrAntiAffinityGroup information element"; + "GS NFV IFA011: Section 7.1.5.5 + ScaleVnfToLevelOpConfig information element"; } - leaf type { - mandatory true; - type affinity-type; + leaf arbitrary-target-levels-supported { + type boolean; + default "false"; description - "Specifies whether the rule is an affinity rule or an - anti-affinity rule."; + "Signals whether scaling according to the parameter + 'scaleInfo' is supported by this VNF."; reference - "GS NFV IFA011: Section 7.1.8.12 - AffinityOrAntiAffinityGroup information element"; + "GS NFV IFA011: Section 7.1.5.5 + ScaleVnfToLevelOpConfig information element"; } + } - leaf scope { - mandatory true; - type affinity-scope; + container heal-vnf-op-config { + description + "This information element defines attributes that + affect the invocation of the HealVnf operation."; + reference + "GS NFV IFA011: Section 7.1.5.2 + VnfLcmOperationsConfiguration information element"; + + list parameter { + key "key"; + + leaf key { + type string; + } + + leaf value { + type string; + } description - "Specifies the scope of the rule, possible values are - 'NFVI-PoP', 'Zone', 'ZoneGroup', 'NFVI-node'."; + "Array of KVP requirements for VNF-specific parameters + to be passed when invoking the HealVnf operation."; reference - "GS NFV IFA011: Section 7.1.8.12 - AffinityOrAntiAffinityGroup information element"; + "GS NFV IFA011: Section 7.1.5.6 HealVnfOpConfig + information element"; } - } - - list indicator { - key "id"; - leaf id { + leaf-list cause { type string; description - "Unique identifier."; + "Supported 'cause' parameter values."; reference - "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + "GS NFV IFA011: Section 7.1.5.6 HealVnfOpConfig information element"; } + } - leaf name { - type string; + container terminate-vnf-op-config { + description + "This information element defines attributes that + affect the invocation of the TerminateVnf operation."; + reference + "GS NFV IFA011: Section 7.1.5.2 + VnfLcmOperationsConfiguration information element"; + + leaf min-graceful-termination { + type yang:timeticks; + default "1"; description - "The human readable name of the VnfIndicator."; + "Minimum timeout value for graceful termination of + a VNF instance."; reference - "GS NFV IFA011: Section 7.1.11.2 VnfIndicator - information element"; + "GS NFV IFA011: Section 7.1.5.7 + TerminateVnfOpConfig information element"; } - leaf indicator-value { - type string; + leaf max-recommended-graceful-termination { + type yang:timeticks; description - "Defines the allowed values or value ranges of this - indicator."; + "Maximum recommended timeout value that can be needed + to gracefully terminate a VNF instance of a + particular type under certain conditions, such as + maximum load condition. This is provided by VNF + provider as information for the operator + facilitating the selection of optimal timeout value. + This value is not used as constraint."; reference - "GS NFV IFA011: Section 7.1.11.2 VnfIndicator - information element"; + "GS NFV IFA011: Section 7.1.5.7 + TerminateVnfOpConfig information element"; } - leaf source { - type enumeration { - enum vnf; - enum em; - enum both; + list parameter { + key "key"; + leaf key { + type string; + } + leaf value { + type string; } description - "Describe the source of the indicator. The possible - values are: - • VNF. - • EM. - • Both. - - This tells the consumer where to send the subscription - request."; + "Array of KVP requirements for VNF-specific parameters + to be passed when invoking the TerminateVnf + operation."; reference - "GS NFV IFA011: Section 7.1.11.2 VnfIndicator - information element"; + "GS NFV IFA011: Section 7.1.5.7 + TerminateVnfOpConfig information element"; } + } + container operate-vnf-op-config { description - "Declares the VNF indicators that are supported by this - VNF (specific to this DF)."; + "This information element defines attributes that + affect the invocation of the OperateVnf operation."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information - element"; - } + "GS NFV IFA011: Section 7.1.5.2 + VnfLcmOperationsConfiguration information element"; - list supported-vnf-interfaces { - key "name"; + leaf min-graceful-stop-timeout { + type yang:timeticks; + default "1"; + description + "Minimum timeout value for graceful stop of a VNF + instance."; + reference + "GS NFV IFA011: Section 7.1.5.8 + OperateVnfOpConfig information element"; + } - leaf name { - type enumeration { - enum vnf-configuration; - enum vnf-indicator; - } + leaf max-recommended-graceful-stop-timeout { + type yang:timeticks; description - "Identifies an interface produced by the VNF. Valid - values: - - VNF_CONFIGURATION - - VNF_INDICATOR"; + "Maximum recommended timeout value that can be + needed to gracefully stop a VNF instance of a + particular type under certain conditions, such as + maximum load condition. This is provided by VNF + provider as information for the operator facilitating + the selection of optimal timeout value. This value + is not used as constraint."; reference - "GS NFV IFA011: Section 7.1.8.16 VnfInterfaceDetails - information element"; + "GS NFV IFA011: Section 7.1.5.8 + OperateVnfOpConfig information element"; } - leaf-list cpd-id { - type leafref { - path "../../../ext-cpd/id"; + list parameter { + key "key"; + leaf key { + type string; + } + leaf value { + type string; } description - "References one or more CPDs from which to instantiate - external CPs through which interface endpoints on the - VNF side can be reached by the VNFM."; + "Array of KVP requirements for VNF-specific parameters + to be passed when invoking the OperateVnf + operation."; reference - "GS NFV IFA011: Section 7.1.8.16 VnfInterfaceDetails - information element"; + "GS NFV IFA011: Section 7.1.5.8 + OperateVnfOpConfig information element"; } + } - list interface-details { + container change-vnf-flavour-op-config { + list parameter { key "key"; - leaf key { type string; } + leaf value { + type string; + } + description + "Array of KVP requirements for VNF-specific parameters + to be passed when invoking the OperateVnf + operation."; + reference + "GS NFV IFA011: Section 7.1.5.9 + ChangeVnfFlavour information element"; + } + description + "Configuration parameters for the ChangeVnfFlavour + operation."; + reference + "GS NFV IFA011: Section 7.1.5.2 + VnfLcmOperationsConfiguration information element"; + } + container change-ext-vnf-connectivity-op-config { + list parameter { + key "key"; + leaf key { + type string; + } leaf value { type string; } + description + "Array of KVP requirements for VNF-specific parameters + to be passed when invoking the + ChangeExtVnfConnectivity operation."; + reference + "GS NFV IFA011: Section 7.1.5.10 + ChangeExtVnfConnectivityOpConfig information + element"; } + description + "Configuration parameters for the + ChangeExtVnfConnectivity operation."; + reference + "GS NFV IFA011: Section 7.1.5.2 + VnfLcmOperationsConfiguration information element"; + } + } + + list affinity-or-anti-affinity-group { + key "id"; + description + "The AffinityOrAntiAffinityGroup describes the affinity + or anti-affinity relationship applicable between the + virtualization containers to be created based on + different VDUs, or between internal VLs to be created + based on different VnfVirtualLinkDesc(s). + + Per VNF, the affinity/anti-affinity rules defined using + this information element, using the + LocalAffinityOrAntiAffinityRule information element, and + using the placement constraints in the + GrantLifecycleOperation as defined in ETSI GS NFV-IFA + 007 [i.3] should be conflict-free. In case of conflicts, + the placement constraints in the + GrantLifecycleOperation shall take precedence."; + + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + leaf id { + type string; description - "Indicates which interfaces the VNF produces and provides - additional details on how to access the interface - endpoints."; + "Identifies an affinity or anti-affinity group to which + the affinity or anti-affinity rule applies."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information - element"; + "GS NFV IFA011: Section 7.1.8.12 + AffinityOrAntiAffinityGroup information element"; } - list monitoring-parameter { - key "id"; + leaf type { + mandatory true; + type affinity-type; + description + "Specifies whether the rule is an affinity rule or an + anti-affinity rule."; + reference + "GS NFV IFA011: Section 7.1.8.12 + AffinityOrAntiAffinityGroup information element"; + } + leaf scope { + mandatory true; + type affinity-scope; description - "Defines the virtualised resources monitoring parameters - on VNF level."; + "Specifies the scope of the rule, possible values are + 'NFVI-PoP', 'Zone', 'ZoneGroup', 'NFVI-node'."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information - element"; + "GS NFV IFA011: Section 7.1.8.12 + AffinityOrAntiAffinityGroup information element"; + } + } - leaf id { - type string; - description - "Unique identifier of the monitoring parameter."; - reference - "GS NFV IFA011: Section 7.1.11.3 MonitoringParameter - information element"; - } - uses monitoring-parameter; + list indicator { + key "id"; + + leaf id { + type string; + description + "Unique identifier."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; } - list scaling-aspect { - key "id"; + leaf name { + type string; + description + "The human readable name of the VnfIndicator."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; + } + + leaf indicator-value { + type string; + description + "Defines the allowed values or value ranges of this + indicator."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; + } + leaf source { + type enumeration { + enum vnf; + enum em; + enum both; + } description - "The scaling aspects supported by this DF of the VNF. - scalingAspect shall be present if the VNF supports - scaling."; + "Describe the source of the indicator. The possible + values are: + • VNF. + • EM. + • Both. + + This tells the consumer where to send the subscription + request."; reference - "GS NFV IFA011: Section 7.1.8.2 VnfDf information + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; + } + + description + "Declares the VNF indicators that are supported by this + VNF (specific to this DF)."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information element"; + } - leaf id { - type string; - description - "Unique identifier of this aspect in the VNFD."; - reference - "GS NFV IFA011: Section 7.1.10.2 ScalingAspect - information element"; + list supported-vnf-interfaces { + key "name"; + + leaf name { + type enumeration { + enum vnf-configuration; + enum vnf-indicator; + } + description + "Identifies an interface produced by the VNF. Valid + values: + - VNF_CONFIGURATION + - VNF_INDICATOR"; + reference + "GS NFV IFA011: Section 7.1.8.16 VnfInterfaceDetails + information element"; + } + + leaf-list cpd-id { + type leafref { + path "../../../ext-cpd/id"; } - leaf name { + description + "References one or more CPDs from which to instantiate + external CPs through which interface endpoints on the + VNF side can be reached by the VNFM."; + reference + "GS NFV IFA011: Section 7.1.8.16 VnfInterfaceDetails + information element"; + } + + list interface-details { + key "key"; + + leaf key { type string; - description - "Human readable name of the aspect."; - reference - "GS NFV IFA011: Section 7.1.10.2 ScalingAspect - information element"; } - leaf description { + + leaf value { type string; - description - "Human readable description of the aspect."; - reference - "GS NFV IFA011: Section 7.1.10.2 ScalingAspect + } + } + + description + "Indicates which interfaces the VNF produces and provides + additional details on how to access the interface + endpoints."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + } + + list monitoring-parameter { + key "id"; + + description + "Defines the virtualised resources monitoring parameters + on VNF level."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + + leaf id { + type string; + description + "Unique identifier of the monitoring parameter."; + reference + "GS NFV IFA011: Section 7.1.11.3 MonitoringParameter + information element"; + } + uses monitoring-parameter; + } + + list scaling-aspect { + key "id"; + + description + "The scaling aspects supported by this DF of the VNF. + scalingAspect shall be present if the VNF supports + scaling."; + reference + "GS NFV IFA011: Section 7.1.8.2 VnfDf information + element"; + + leaf id { + type string; + description + "Unique identifier of this aspect in the VNFD."; + reference + "GS NFV IFA011: Section 7.1.10.2 ScalingAspect information element"; + } + + leaf name { + type string; + description + "Human readable name of the aspect."; + reference + "GS NFV IFA011: Section 7.1.10.2 ScalingAspect + information element"; + } + + leaf description { + type string; + description + "Human readable description of the aspect."; + reference + "GS NFV IFA011: Section 7.1.10.2 ScalingAspect + information element"; + } + + leaf max-scale-level { + type uint32 { + range "1..max"; } - leaf max-scale-level { - type uint32 { - range "1..max"; + description + "The maximum scaleLevel for total number of scaling + steps that can be applied w.r.t. this aspect. The + value of this attribute corresponds to the number of + scaling steps can be applied to this aspect when + scaling it from the minimum scale level (i.e. 0) to the + maximum scale level defined by this attribute."; + reference + "GS NFV IFA011: Section 7.1.10.2 ScalingAspect + information element"; + } + + container aspect-delta-details { + list deltas { + key "id"; + min-elements 1; + + leaf id { + type string; + description + "Identifier of this scaling delta."; + reference + "GS NFV IFA011: Section 7.1.10.4 ScalingDelta + information element"; } - description - "The maximum scaleLevel for total number of scaling - steps that can be applied w.r.t. this aspect. The - value of this attribute corresponds to the number of - scaling steps can be applied to this aspect when - scaling it from the minimum scale level (i.e. 0) to the - maximum scale level defined by this attribute."; - reference - "GS NFV IFA011: Section 7.1.10.2 ScalingAspect - information element"; - } - container aspect-delta-details { - list deltas { + list vdu-delta { key "id"; - min-elements 1; leaf id { - type string; + type leafref { + path "../../../../../../vdu/id"; + } description - "Identifier of this scaling delta."; + "Uniquely identifies a VDU."; reference - "GS NFV IFA011: Section 7.1.10.4 ScalingDelta + "GS NFV IFA011: Section 7.1.8.9 VduLevel information element"; } - list vdu-delta { - key "id"; - - leaf id { - type leafref { - path "/nfv/vnfd/vdu/id"; - } - description - "Uniquely identifies a VDU."; - reference - "GS NFV IFA011: Section 7.1.8.9 VduLevel - information element"; - } - - leaf number-of-instances { - type uint32 { - range "0..max"; - } - description - "Number of instances of VNFC based on this VDU to - deploy for an instantiation level or for a - scaling delta. Shall be zero or greater."; - reference - "GS NFV IFA011: Section 7.1.8.9 VduLevel - information element"; + leaf number-of-instances { + type uint32 { + range "0..max"; } description - "The number of VNFC instances based on particular - VDUs to be created or removed."; + "Number of instances of VNFC based on this VDU to + deploy for an instantiation level or for a + scaling delta. Shall be zero or greater."; reference - "GS NFV IFA011: Section 7.1.10.4 ScalingDelta + "GS NFV IFA011: Section 7.1.8.9 VduLevel information element"; } + description + "The number of VNFC instances based on particular + VDUs to be created or removed."; + reference + "GS NFV IFA011: Section 7.1.10.4 ScalingDelta + information element"; + } + + list virtual-link-bit-rate-delta { + key "id"; - list virtual-link-bit-rate-delta { - key "id"; + leaf id { + type string; + description + "Uniquely identifies a VnfVirtualLinkDesc."; + reference + "GS NFV IFA011: Section 7.1.10.5 + VirtualLinkBitRateLevel information element"; + } - leaf id { - type string; + container bit-rate-requirements { + leaf root { + type uint32; + units bits/sec; + mandatory true; description - "Uniquely identifies a VnfVirtualLinkDesc."; + "Throughput requirement of the link (e.g. + bitrate of E-Line, root bitrate of E-Tree, + aggregate capacity of E-LAN)."; reference - "GS NFV IFA011: Section 7.1.10.5 - VirtualLinkBitRateLevel information element"; + "GS NFV IFA011: Section 7.1.8.6 + LinkBitrateRequirements information element"; } - container bit-rate-requirements { - leaf root { - type uint32; - units bits/sec; - mandatory true; - description - "Throughput requirement of the link (e.g. - bitrate of E-Line, root bitrate of E-Tree, - aggregate capacity of E-LAN)."; - reference - "GS NFV IFA011: Section 7.1.8.6 - LinkBitrateRequirements information element"; - } - - leaf leaf { - type uint32; - units bits/sec; - description - "Throughput requirement of leaf connections to - the link when applicable to the connectivity - type (e.g. for E-Tree and E-LAN branches)."; - reference - "GS NFV IFA011: Section 7.1.8.6 - LinkBitrateRequirements information element"; - } + leaf leaf { + type uint32; + units bits/sec; description - "Bitrate requirements for an instantiation level - or bitrate delta for a scaling step."; + "Throughput requirement of leaf connections to + the link when applicable to the connectivity + type (e.g. for E-Tree and E-LAN branches)."; reference - "GS NFV IFA011: Section 7.1.10.5 - VirtualLinkBitRateLevel information element"; + "GS NFV IFA011: Section 7.1.8.6 + LinkBitrateRequirements information element"; } description - "The bitrate to be added or removed to virtual links - created from particular virtual link descriptors."; + "Bitrate requirements for an instantiation level + or bitrate delta for a scaling step."; reference - "GS NFV IFA011: Section 7.1.10.4 ScalingDelta - information element"; + "GS NFV IFA011: Section 7.1.10.5 + VirtualLinkBitRateLevel information element"; } description - "Declares different scaling deltas, each of which is - applied for one or more scaling steps of this - aspect."; + "The bitrate to be added or removed to virtual links + created from particular virtual link descriptors."; reference - "GS NFV IFA011: Section 7.1.10.3 AspectDeltaDetails + "GS NFV IFA011: Section 7.1.10.4 ScalingDelta information element"; } + description + "Declares different scaling deltas, each of which is + applied for one or more scaling steps of this + aspect."; + reference + "GS NFV IFA011: Section 7.1.10.3 AspectDeltaDetails + information element"; + } - leaf step-deltas { - type leafref { - path "../deltas/id"; - } - description - "Identifiers of the individual scaling deltas to be - applied for the subsequent scaling steps of this - aspect. The first entry in the array shall correspond - to the first scaling step (between scale levels 0 to - 1) and the last entry in the array shall correspond - to the last scaling step (between maxScaleLevel-1 - and maxScaleLevel). - - Each referenced scaling delta shall be declared in - the 'deltas' attribute."; - reference - "GS NFV IFA011: Section 7.1.10.3 AspectDeltaDetails - information element"; + leaf step-deltas { + type leafref { + path "../deltas/id"; } description - "A specification of the deltas in terms of number of - instances of VNFCs and virtual link bit rates that - correspond to the scaling steps of this aspect. A - cardinality of zero indicates that this mapping has to - be specified in a lifecycle management script or be - otherwise known to the VNFM. The information in this - attribute, if provided, shall be consistent with the - information provided in the 'InstantiationLevel' - information element. If this attribute is provided, it - shall be provided for all scaling aspects."; + "Identifiers of the individual scaling deltas to be + applied for the subsequent scaling steps of this + aspect. The first entry in the array shall correspond + to the first scaling step (between scale levels 0 to + 1) and the last entry in the array shall correspond + to the last scaling step (between maxScaleLevel-1 + and maxScaleLevel). + + Each referenced scaling delta shall be declared in + the 'deltas' attribute."; reference - "GS NFV IFA011: Section 7.1.10.2 ScalingAspect + "GS NFV IFA011: Section 7.1.10.3 AspectDeltaDetails information element"; } + description + "A specification of the deltas in terms of number of + instances of VNFCs and virtual link bit rates that + correspond to the scaling steps of this aspect. A + cardinality of zero indicates that this mapping has to + be specified in a lifecycle management script or be + otherwise known to the VNFM. The information in this + attribute, if provided, shall be consistent with the + information provided in the 'InstantiationLevel' + information element. If this attribute is provided, it + shall be provided for all scaling aspects."; + reference + "GS NFV IFA011: Section 7.1.10.2 ScalingAspect + information element"; } } + } + + container configurable-properties { + description + "Describes the configurable properties of the VNF + (e.g. related to auto scaling and auto healing)."; + reference + "GS NFV IFA011: Section 7.1.2 VNFD information element"; - container configurable-properties { + leaf is-auto-scalable-enabled { + type boolean; description - "Describes the configurable properties of the VNF - (e.g. related to auto scaling and auto healing)."; + "It permits to enable (TRUE) / disable (FALSE) the + auto-scaling functionality."; reference - "GS NFV IFA011: Section 7.1.2 VNFD information element"; + "GS NFV IFA011: Section 7.1.12 VnfConfigurableProperties + information element"; + } - leaf is-auto-scalable-enabled { - type boolean; - description - "It permits to enable (TRUE) / disable (FALSE) the - auto-scaling functionality."; - reference - "GS NFV IFA011: Section 7.1.12 VnfConfigurableProperties - information element"; - } + leaf is-auto-heal-enabled { + type boolean; + description + "It permits to enable (TRUE) / disable (FALSE) the + auto-healing functionality."; + reference + "GS NFV IFA011: Section 7.1.12 VnfConfigurableProperties + information element"; + } - leaf is-auto-heal-enabled { - type boolean; - description - "It permits to enable (TRUE) / disable (FALSE) the - auto-healing functionality."; - reference - "GS NFV IFA011: Section 7.1.12 VnfConfigurableProperties - information element"; + list additional-configurable-property { + key "key"; + + leaf key { + type string; } - list additional-configurable-property { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "It provides VNF specific configurable properties that can - be modified using the ModifyVnfConfiguration operation."; - reference - "GS NFV IFA011: Section 7.1.12 VnfConfigurableProperties - information element"; + leaf value { + type string; } + description + "It provides VNF specific configurable properties that can + be modified using the ModifyVnfConfiguration operation."; + reference + "GS NFV IFA011: Section 7.1.12 VnfConfigurableProperties + information element"; } + } + + container modifiable-attributes { + description + "Describes the modifiable attributes of the VNF."; + reference + "GS NFV IFA011: Section 7.1.2 VNFD information element"; - container modifiable-attributes { + leaf-list extension { + type string; description - "Describes the modifiable attributes of the VNF."; + "Additional VNF-specific attributes of VnfInfo that + affect the lifecycle management of a VNF instance and + that are writeable. + + For each VNF instance, these attributes are stored + persistently by the VNFM and can be queried and + modified through the VNFM. + + These attributes are intended to be consumed by the + VNFM or by the lifecycle management scripts during the + execution of VNF lifecycle management operations. + + Modifying these values has no direct effect on the VNF + instance; however, modified values can be considered + during subsequent VNF lifecycle management operations, + which means that the modified values can indirectly + affect the configuration of the VNF instance."; reference - "GS NFV IFA011: Section 7.1.2 VNFD information element"; - - leaf-list extension { - type string; - description - "Additional VNF-specific attributes of VnfInfo that - affect the lifecycle management of a VNF instance and - that are writeable. + "GS NFV IFA011: Section 7.1.14 VnfInfoModifiableAttributes + information element"; + } - For each VNF instance, these attributes are stored - persistently by the VNFM and can be queried and - modified through the VNFM. + leaf-list metadata { + type string; + description + "Additional VNF-specific attributes of VnfInfo that are + writeable and that provide metadata describing the VNF + instance. + + For each VNF instance, these attributes are stored + persistently by the VNFM and can be queried and modified + through the VNFM. + + These attributes are intended to provide information to + functional blocks external to the VNFM and will not be + used by the VNFM or the VNF lifecycle management + scripts when executing lifecycle management operations. + + Modifying these attributes has no effect on the VNF + instance. It only affects the attribute values stored by + the VNFM."; + reference + "GS NFV IFA011: Section 7.1.14 VnfInfoModifiableAttributes + information element"; + } + } - These attributes are intended to be consumed by the - VNFM or by the lifecycle management scripts during the - execution of VNF lifecycle management operations. + list lifecycle-management-script { + key "id"; + description + "Includes a list of events and corresponding management + scripts performed for the VNF."; + reference + "GS NFV IFA011: Section 7.1.2 VNFD information element"; - Modifying these values has no direct effect on the VNF - instance; however, modified values can be considered - during subsequent VNF lifecycle management operations, - which means that the modified values can indirectly - affect the configuration of the VNF instance."; - reference - "GS NFV IFA011: Section 7.1.14 VnfInfoModifiableAttributes - information element"; - } - leaf-list metadata { - type string; - description - "Additional VNF-specific attributes of VnfInfo that are - writeable and that provide metadata describing the VNF - instance. + leaf id { + type string; + description + "A unique string that identfies the script in question."; + } - For each VNF instance, these attributes are stored - persistently by the VNFM and can be queried and modified - through the VNFM. + leaf-list event { + type internal-lifecycle-management-script-event; + description + "Describes VNF lifecycle event(s) or an external stimulus + detected on a VNFM reference point."; + reference + "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript + information element"; + } - These attributes are intended to provide information to - functional blocks external to the VNFM and will not be - used by the VNFM or the VNF lifecycle management - scripts when executing lifecycle management operations. + leaf-list lcm-transition-event { + type string; + description + "Describes the transition VNF lifecycle event(s) that + cannot be mapped to any of the enumerated values + defined for the event attribute."; + reference + "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript + information element"; + } - Modifying these attributes has no effect on the VNF - instance. It only affects the attribute values stored by - the VNFM."; - reference - "GS NFV IFA011: Section 7.1.14 VnfInfoModifiableAttributes - information element"; - } + leaf script { + type string; + description + "Includes a VNF LCM script (e.g. written in a DSL as + specified in requirement VNF_PACK.LCM.001) triggered to + react to one of the events listed in the event + attribute."; + reference + "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript + information element"; } - list lifecycle-management-script { - key "id"; + leaf script-dsl { + type string; description - "Includes a list of events and corresponding management - scripts performed for the VNF."; + "Defines the domain specific language (i.e. the type) of + script that is provided. Types of scripts could include + bash, python, etc."; reference - "GS NFV IFA011: Section 7.1.2 VNFD information element"; + "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript + information element"; + } - leaf id { - type string; - description - "A unique string that identfies the script in question."; - } + list script-input { + key "key"; - leaf-list event { - type internal-lifecycle-management-script-event; - description - "Describes VNF lifecycle event(s) or an external stimulus - detected on a VNFM reference point."; - reference - "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript - information element"; - } - leaf-list lcm-transition-event { - type string; - description - "Describes the transition VNF lifecycle event(s) that - cannot be mapped to any of the enumerated values - defined for the event attribute."; - reference - "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript - information element"; - } - leaf script { + leaf key { type string; - description - "Includes a VNF LCM script (e.g. written in a DSL as - specified in requirement VNF_PACK.LCM.001) triggered to - react to one of the events listed in the event - attribute."; - reference - "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript - information element"; } - leaf script-dsl { + + leaf value { type string; - description - "Defines the domain specific language (i.e. the type) of - script that is provided. Types of scripts could include - bash, python, etc."; - reference - "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript - information element"; - } - list script-input { - key "key"; - leaf key { - type string; - } - leaf value { - type string; - } - description - "Array of KVP requirements with the key as the parameter - name and the value as the parameter that need to be - passed as an input to the script."; - reference - "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript - information element"; } + description + "Array of KVP requirements with the key as the parameter + name and the value as the parameter that need to be + passed as an input to the script."; + reference + "GS NFV IFA011: Section 7.1.13 LifeCycleManagementScript + information element"; } + } - list element-group { - key "id"; + list element-group { + key "id"; + description + "Describes the associated elements of a VNFD for a certain + purpose during VNF lifecycle management."; + reference + "GS NFV IFA011: Section 7.1.2 VNFD information element"; + + leaf id { + type string; description - "Describes the associated elements of a VNFD for a certain - purpose during VNF lifecycle management."; + "Unique identifier of this group in the VNFD."; reference - "GS NFV IFA011: Section 7.1.2 VNFD information element"; + "GS NFV IFA011: Section 7.1.4 VnfdElementGroup + information element"; + } - leaf id { - type string; - description - "Unique identifier of this group in the VNFD."; - reference - "GS NFV IFA011: Section 7.1.4 VnfdElementGroup - information element"; - } - leaf description { - type string; - description - "Human readable description of the group."; - reference - "GS NFV IFA011: Section 7.1.4 VnfdElementGroup - information element"; - } - leaf-list vdu { - type leafref { - path "../../nfv:vdu/nfv:id"; - } - description - "References to Vdus that are part of this group."; - reference - "GS NFV IFA011: Section 7.1.4 VnfdElementGroup - information element"; + leaf description { + type string; + description + "Human readable description of the group."; + reference + "GS NFV IFA011: Section 7.1.4 VnfdElementGroup + information element"; + } + + leaf-list vdu { + type leafref { + path "../../vdu/id"; } - leaf-list virtual-link-desc { - type leafref { - path "../../nfv:int-virtual-link-desc/nfv:id"; - } - description - "References to VnfVirtualLinkDesc that are part of this - group."; - reference - "GS NFV IFA011: Section 7.1.4 VnfdElementGroup - information element"; + description + "References to Vdus that are part of this group."; + reference + "GS NFV IFA011: Section 7.1.4 VnfdElementGroup + information element"; + } + + leaf-list virtual-link-desc { + type leafref { + path "../../int-virtual-link-desc/id"; } + description + "References to VnfVirtualLinkDesc that are part of this + group."; + reference + "GS NFV IFA011: Section 7.1.4 VnfdElementGroup + information element"; } + } - list indicator { - key "id"; + list indicator { + key "id"; + description + "Declares the VNF indicators that are supported by this + VNF."; + reference + "GS NFV IFA011: Section 7.1.2 VNFD information element"; + + leaf id { + type string; description - "Declares the VNF indicators that are supported by this - VNF."; + "Unique identifier"; reference - "GS NFV IFA011: Section 7.1.2 VNFD information element"; + "GS NFV IFA011: Section 7.1.11.2 VnfdIndicator + information element"; + } - leaf id { - type string; - description - "Unique identifier"; - reference - "GS NFV IFA011: Section 7.1.11.2 VnfdIndicator - information element"; - } - leaf name { - type string; - description - "The human readable name of the VnfIndicator."; - reference - "GS NFV IFA011: Section 7.1.11.2 VnfdIndicator - information element"; - } - leaf-list indicator-value { - type string; - description - "Defines the allowed values or value ranges of this - indicator."; - reference - "GS NFV IFA011: Section 7.1.11.2 VnfdIndicator - information element"; - } - leaf source { - type enumeration { - enum "vnf"; - enum "em"; - enum "both"; - } - description - "Describe the source of the indicator. The possible values - are: - • VNF. - • EM. - • Both. - This tells the consumer where to send the subscription - request."; - reference - "GS NFV IFA011: Section 7.1.11.2 VnfdIndicator - information element"; - } + leaf name { + type string; + description + "The human readable name of the VnfIndicator."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfdIndicator + information element"; } - leaf-list auto-scale { + leaf-list indicator-value { type string; description - "Rule that determines when a scaling action needs to be - triggered on a VNF instance e.g. based on certain VNF - indicator values or VNF indicator value changes or a - combination of VNF indicator value(s) and monitoring - parameter(s)."; + "Defines the allowed values or value ranges of this + indicator."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfdIndicator + information element"; + } + + leaf source { + type enumeration { + enum "vnf"; + enum "em"; + enum "both"; + } + description + "Describe the source of the indicator. The possible values + are: + • VNF. + • EM. + • Both. + This tells the consumer where to send the subscription + request."; reference - "GS NFV IFA011: Section 7.1.2 VNFD information element"; + "GS NFV IFA011: Section 7.1.11.2 VnfdIndicator + information element"; } } + + leaf-list auto-scale { + type string; + description + "Rule that determines when a scaling action needs to be + triggered on a VNF instance e.g. based on certain VNF + indicator values or VNF indicator value changes or a + combination of VNF indicator value(s) and monitoring + parameter(s)."; + reference + "GS NFV IFA011: Section 7.1.2 VNFD information element"; + } } } -- GitLab