diff --git a/example-data/nfv-nsd.xml b/example-data/nfv-nsd.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba4ec2d7b634784082a719200016af7c15ecdefa --- /dev/null +++ b/example-data/nfv-nsd.xml @@ -0,0 +1,135 @@ + + + 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 + + firewall + inside + + nfv:ethernet + + + management + + firewall + management + + nfv:ethernet + + + outside + + firewall + outside + + nfv:ethernet + + + normal + + firewall + 1 + 2 + + + double + + firewall + 2 + + + + single + + firewall + 1 + + + single + + + + firewall-nsd + ASA + + inside + + + management + + + outside + + + firewall + + firewall + ASA + normal + single + 1 + 1 + + + single + + firewall + 1 + + + + + diff --git a/example-data/nfv-pnfd.xml b/example-data/nfv-pnfd.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cd51f49372abadf771dcbef9bfc3c0dfe4ca34e --- /dev/null +++ b/example-data/nfv-pnfd.xml @@ -0,0 +1,8 @@ + + physical-dpi + 1.0 + + outside + nfv:ethernet + + diff --git a/example-data/nfv-vnfd.xml b/example-data/nfv-vnfd.xml new file mode 100644 index 0000000000000000000000000000000000000000..7587240efcd281a762527e1b7fa1e6a49049ee9e --- /dev/null +++ b/example-data/nfv-vnfd.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 1ee310fab7325b42f6337b3de3ad7e50e3e27700..92731014a95ae724ed26a40eb703cf7928f157c3 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 @@ -148,11 +148,11 @@ 2 - + csr-vsd root-storage 0 - + csr-image CSR image @@ -280,9 +280,7 @@ fw2dpi - - ethernet - + ethernet normal @@ -295,9 +293,7 @@ mgmt - - ipv4 - + ipv4 normal @@ -310,9 +306,7 @@ r2fw - - ethernet - + ethernet normal @@ -535,9 +529,7 @@ r2fw - - ipv4 - + ipv4 r2fw diff --git a/run-test.sh b/run-test.sh index 471b13aec126d886f0f2d6f3b1fb8eba09b89090..9fad42dcaf0e07f3ca82d184ef5a3451b171c8b5 100755 --- a/run-test.sh +++ b/run-test.sh @@ -7,19 +7,36 @@ set -e source /opt/confd/confdrc cd src -echo "Testing compilation" CONFD_OPTS="--fail-on-warnings" CONFD_OPTS="" + +echo "Testing compilations of VNFD." +confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-vnfd.fxs etsi-nfv-vnfd.yang +echo "Testing compilations of PNFD." +confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-pnfd.fxs etsi-nfv-pnfd.yang +echo "Testing compilations of NSD." +confdc -c $CONFD_OPTS -o /opt/confd/etc/confd/etsi-nfv-nsd.fxs etsi-nfv-nsd.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 for the simple example" +echo "Loading Data for VNFD" +confd_load -l -m nfv-vnfd.xml + +echo "Loading Data for PNFD" +confd_load -l -m nfv-pnfd.xml + +echo "Loading Data for NSD" +confd_load -l -m nfv-nsd.xml + +echo "Loading Data for descriptors" confd_load -l -m nfv.xml echo "Loading data for the complex Vnfd example" confd_load -l -m complex-vnfd.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 8c641a8a3772ac125113e413524b3e23510ce9ef..0a1c361eddba042598317e1bec71d6797a287d03 100644 --- a/src/yang/etsi-nfv-common.yang +++ b/src/yang/etsi-nfv-common.yang @@ -3,10 +3,13 @@ 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."; - revision 2019-03-18 { + revision 2019-04-25 { description "Initial revision @@ -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 d6421299979a409fc26e768e82e031d1ff957132..afedb3b7a4a8daf1178ce22f92df35c9b96188f9 100644 --- a/src/yang/etsi-nfv-descriptors.yang +++ b/src/yang/etsi-nfv-descriptors.yang @@ -14,7 +14,7 @@ module etsi-nfv-descriptors { description "Network Function Virtualization Descriptors"; - revision 2019-03-18 { + revision 2019-04-25 { description "Initial revision. NSD and PNFD according to ETSI GS NFV-IFA 014 Ed261v252 @@ -22,8 +22,44 @@ module etsi-nfv-descriptors { } container nfv { - uses vnfd; - uses nsd; - uses pnfd; + 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; + } + + list nsd { + key "id"; + + description + "The NSD information element is a deployment template whose + instances are used by the NFVO for the lifecycle + management of NSs."; + reference + "GS NFV-IFA014: Section 6.2.2, Network Service Descriptor + information element."; + + uses nsd; + } + + list pnfd { + key "id"; + + description + "The Pnfd information element is a deployment template + enabling on-boarding PNFs and referencing them from an + NSD. It focuses on connectivity aspects only."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element."; + + uses pnfd; + } } } diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index 483b2460c7a5a89462187be61d197046dcd08e8b..1eb49ce02f133723d16093debe9c6aef98d1397a 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -11,7 +11,7 @@ submodule etsi-nfv-ns { description "Models for NS according to ETSI GS NFV-IFA 014."; - revision 2019-03-18 { + revision 2019-04-25 { description "Initial revision Common data structure to support NSD according to: @@ -35,1542 +35,1551 @@ submodule etsi-nfv-ns { grouping nsd { - list nsd { - key "id"; + leaf id { + type string; + description + "Identifier of this NSD information element. It Globally + uniquely identifies an instance of the NSD."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + } - leaf id { - type string; - description - "Identifier of this NSD information element. It Globally - uniquely identifies an instance of the NSD."; - reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; - } - leaf designer { - type string; - description - "Identifies the designer of the NSD."; - reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; - } - leaf version { - type string; - description - "Identifies the version of the NSD."; - reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; - } - leaf name { - type string; - description - "Provides the human readable name of the NSD."; - reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; - } - leaf invariant-id { - type string; - description - "Identifies an NSD in a version independent manner. This - attribute is invariant across versions of the network - service descriptor."; - reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; + leaf designer { + type string; + description + "Identifies the designer of the NSD."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + } + + leaf version { + type string; + description + "Identifies the version of the NSD."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + } + + leaf name { + type string; + description + "Provides the human readable name of the NSD."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + } + + leaf invariant-id { + type string; + description + "Identifies an NSD in a version independent manner. This + attribute is invariant across versions of the network + service descriptor."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + } + + leaf-list nested-nsd-id { + must ". != ../id"; + type leafref { + path "../../nsd/id"; } + description + "References the NSD of a constituent nested NS."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + } - leaf-list nested-nsd-id { - must ". != ../id"; - type leafref { - path "../../nsd/id"; - } - description - "References the NSD of a constituent nested NS."; - reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; + leaf-list vnfd-id { + type leafref { + path "../../vnfd/id"; } + description + "References the VNFD of a constituent VNF."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + } - leaf-list vnfd-id { - type leafref { - path "../../vnfd/id"; - } - description - "References the VNFD of a constituent VNF."; - reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; + leaf-list pnfd-id { + type leafref { + path "../../pnfd/id"; } + description + "References the PNFD of a constituent PNF."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + } + + list sapd { + key "id"; + description + "Provides the descriptor of a service access point of the + network service."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; - leaf-list pnfd-id { - type leafref { - path "../../pnfd/id"; - } + leaf id { + type string; description - "References the PNFD of a constituent PNF."; + "Identifier of this Cpd information element."; reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; + "GS NFV IFA014: Section 6.6.3.1 Cpd information element"; } - list sapd { - key "id"; + leaf address-assignment { + type boolean; description - "Provides the descriptor of a service access point of the - network service."; + "Specify whether the SAP address assignment is under the + responsibility of management and orchestration functions + or not. If it is set to True, management and + orchestration functions are responsible for assigning + addresses to the access points instantiated from this + SAPD."; reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; - - leaf id { - type string; - description - "Identifier of this Cpd information element."; - reference - "GS NFV IFA014: Section 6.6.3.1 Cpd information element"; - } + "GS NFV IFA014: Section 6.2.3.2 Sapd information element"; + } - leaf address-assignment { - type boolean; + choice cpd-or-virtual-link { + leaf virtual-link-desc { + type leafref { + path "../../virtual-link-desc/id"; + } description - "Specify whether the SAP address assignment is under the - responsibility of management and orchestration functions - or not. If it is set to True, management and - orchestration functions are responsible for assigning - addresses to the access points instantiated from this - SAPD."; + "References the descriptor of the NS VL instance to + which the SAP instantiated from this SAPD connects to."; reference "GS NFV IFA014: Section 6.2.3.2 Sapd information element"; } - choice cpd-or-virtual-link { - leaf virtual-link-desc { - type leafref { - path "../../virtual-link-desc/id"; - } - description - "References the descriptor of the NS VL instance to - which the SAP instantiated from this SAPD connects to."; - reference - "GS NFV IFA014: Section 6.2.3.2 Sapd information element"; - } - - choice associated-cpd-id { - container vnf { - leaf vnfd-id { - mandatory true; - type leafref { - path "../../../../nfv:vnfd/nfv:id"; - } - must "boolean(../../../vnfd-id[.=current()])"; + choice associated-cpd-id { + container vnf { + leaf vnfd-id { + mandatory true; + type leafref { + path "../../../../vnfd/id"; } + must "boolean(../../../vnfd-id[.=current()])"; + } - leaf ext-cpd-id { - mandatory true; - type leafref { - path "deref(../vnfd-id)/../nfv:ext-cpd/nfv:id"; - } + leaf ext-cpd-id { + mandatory true; + type leafref { + path "deref(../vnfd-id)/../ext-cpd/id"; } } + } - container pnf { - leaf pnfd-id { - mandatory true; - type leafref { - path "../../../../nfv:pnfd/nfv:id"; - } - must "boolean(../pnfd-id[.=current()])"; + container pnf { + leaf pnfd-id { + mandatory true; + type leafref { + path "../../../../pnfd/id"; } + must "boolean(../pnfd-id[.=current()])"; + } - leaf ext-cpd-id { - mandatory true; - type leafref { - path "deref(../pnfd-id)/../nfv:ext-cpd/nfv:id"; - } + leaf ext-cpd-id { + mandatory true; + type leafref { + path "deref(../pnfd-id)/../ext-cpd/id"; } } - container ns { - leaf nsd-id { - mandatory true; - type leafref { - path "../../../../nfv:nsd/nfv:id"; - } - must "boolean(../nsd-id[.=current()])"; + } + container ns { + leaf nsd-id { + mandatory true; + type leafref { + path "../../../../nsd/id"; } + must "boolean(../nsd-id[.=current()])"; + } - leaf ext-cpd-id { - mandatory true; - type leafref { - path "deref(../nsd-id)/../nfv:sapd/nfv:id"; - } + leaf ext-cpd-id { + mandatory true; + type leafref { + path "deref(../nsd-id)/../sapd/id"; } } } } } + } + + list virtual-link-desc { + key "id"; + description + "Provides the constituent VLDs."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + leaf id { + type string; + description + "Identifier of the NsVirtualLinkDesc information element. + It uniquely identifies a VLD."; + reference + "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc + information element"; + } - list virtual-link-desc { + uses connectivity-type; + + list df { key "id"; + description - "Provides the constituent VLDs."; + "The VirtualLinkDf information element specifies + properties for instantiating a VL according to a + specific flavour."; reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc information element"; + leaf id { type string; description - "Identifier of the NsVirtualLinkDesc information element. - It uniquely identifies a VLD."; + "Identifies this VirtualLinkDf information element + within a VLD."; reference - "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc + "GS NFV IFA014: Section 6.5.4.2 VirtualLinkDf information element"; } - uses connectivity-type; - - list df { - key "id"; - + container qos { + presence "VL QoS parameters"; description - "The VirtualLinkDf information element specifies - properties for instantiating a VL according to a - specific flavour."; + "The QoS information element specifies quality of + service parameters applicable to a VL."; reference - "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc + "GS NFV IFA014: Section 6.5.4.2 VirtualLinkDf information element"; - leaf id { - type string; + leaf latency { + mandatory true; + type uint32; + units "ms"; description - "Identifies this VirtualLinkDf information element - within a VLD."; + "Specifies the maximum latency in ms."; reference - "GS NFV IFA014: Section 6.5.4.2 VirtualLinkDf - information element"; + "GS NFV IFA014: Section 6.5.6.2 QoS information + element"; } - container qos { - presence "VL QoS parameters"; + leaf packet-delay-variation { + mandatory true; + type uint32; + units "ms"; description - "The QoS information element specifies quality of - service parameters applicable to a VL."; + "Specifies the maximum jitter in ms."; reference - "GS NFV IFA014: Section 6.5.4.2 VirtualLinkDf - information element"; - - leaf latency { - mandatory true; - type uint32; - units "ms"; - description - "Specifies the maximum latency in ms."; - reference - "GS NFV IFA014: Section 6.5.6.2 QoS information - element"; - } - - leaf packet-delay-variation { - mandatory true; - type uint32; - units "ms"; - description - "Specifies the maximum jitter in ms."; - reference - "GS NFV IFA014: Section 6.5.6.2 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 IFA014: Section 6.5.6.2 QoS information - element"; - } + "GS NFV IFA014: Section 6.5.6.2 QoS information + element"; + } - leaf priority { - type uint32; - description - "Specifies the priority level in case of - congestion on the underlying physical links."; - reference - "GS NFV IFA014: Section 6.5.6.2 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 IFA014: Section 6.5.6.2 QoS information + element"; } - leaf service-availability-level { - type enumeration { - enum "level-1"; - enum "level-2"; - enum "level-3"; - } + leaf priority { + type uint32; description - "Specifies one of the three levels defined in ETSI - ETSI GS NFV-REL 001 [i.5] - * Level 1. - * Level 2. - * Level 3."; + "Specifies the priority level in case of + congestion on the underlying physical links."; reference - "GS NFV IFA014: Section 6.5.4.2 VirtualLinkDf - information element"; + "GS NFV IFA014: Section 6.5.6.2 QoS information + element"; } } - leaf test-access { + leaf service-availability-level { type enumeration { - enum none; - enum passive-monitoring; - enum active; + enum "level-1"; + enum "level-2"; + enum "level-3"; } description - "Specifies test access facilities expected on the VL."; + "Specifies one of the three levels defined in ETSI + ETSI GS NFV-REL 001 [i.5] + * Level 1. + * Level 2. + * Level 3."; reference - "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc + "GS NFV IFA014: Section 6.5.4.2 VirtualLinkDf information element"; } + } - leaf description { - type string; - description - "Provides human-readable information on the purpose of - the virtual link (e.g. VL for control plane traffic)."; - reference - "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc - information element"; + leaf test-access { + type enumeration { + enum none; + enum passive-monitoring; + enum active; } - uses security-parameters; + description + "Specifies test access facilities expected on the VL."; + reference + "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc + information element"; } - list vnffgd { - key "id"; - + leaf description { + type string; description - "Provides the descriptors of the applicable forwarding - graphs."; + "Provides human-readable information on the purpose of + the virtual link (e.g. VL for control plane traffic)."; reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc information element"; + } + uses security-parameters; + } - leaf id { - type string; - description - "Identifier of this Vnffgd information element. It - uniquely identifies a VNFFGD."; - reference - "GS NFV IFA014: Section 6.4.2.2 Vnffgd information - element"; - } + list vnffgd { + key "id"; - leaf-list vnf-profile-id { - type leafref { - path "../../df/vnf-profile/id"; - } - description - "References the VnfProfile of a constituent VNF."; - reference - "GS NFV IFA014: Section 6.4.2.2 Vnffgd information + description + "Provides the descriptors of the applicable forwarding + graphs."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + + leaf id { + type string; + description + "Identifier of this Vnffgd information element. It + uniquely identifies a VNFFGD."; + reference + "GS NFV IFA014: Section 6.4.2.2 Vnffgd information element"; + } + + leaf-list vnf-profile-id { + type leafref { + path "../../df/vnf-profile/id"; } + description + "References the VnfProfile of a constituent VNF."; + reference + "GS NFV IFA014: Section 6.4.2.2 Vnffgd information + element"; + } - leaf-list pnf-profile-id { - type leafref { - path "../../df/pnf-profile/id"; - } - description - "References the PnfProfile of a constituent PNF."; - reference - "GS NFV IFA014: Section 6.4.2.2 Vnffgd information - element"; + leaf-list pnf-profile-id { + type leafref { + path "../../df/pnf-profile/id"; } + description + "References the PnfProfile of a constituent PNF."; + reference + "GS NFV IFA014: Section 6.4.2.2 Vnffgd information + element"; + } - leaf-list nested-ns-profile-id { - type leafref { - path "../../df/ns-profile/id"; - } - description - "References the NsProfile of a nestedNS."; - reference - "GS NFV IFA014: Section 6.4.2.2 Vnffgd information - element"; + leaf-list nested-ns-profile-id { + type leafref { + path "../../df/ns-profile/id"; } + description + "References the NsProfile of a nestedNS."; + reference + "GS NFV IFA014: Section 6.4.2.2 Vnffgd information + element"; + } - leaf virtual-link-profile-id { - type leafref { - path "../../df/virtual-link-profile/id"; - } - description - "References the Virtual Link Profile of a constituent - VL."; - reference - "GS NFV IFA014: Section 6.4.2.2 Vnffgd information - element"; + leaf virtual-link-profile-id { + type leafref { + path "../../df/virtual-link-profile/id"; } + description + "References the Virtual Link Profile of a constituent + VL."; + reference + "GS NFV IFA014: Section 6.4.2.2 Vnffgd information + element"; + } - list cpd-pool { - key "id"; + list cpd-pool { + key "id"; - description - "Describes a pool of descriptors of connection points - attached to one of the constituent VNFs and PNFs and/or - one of the SAPs of the parent NS or of a nested NS."; - reference - "GS NFV IFA014: Section 6.4.2.2 Vnffgd information - element"; + description + "Describes a pool of descriptors of connection points + attached to one of the constituent VNFs and PNFs and/or + one of the SAPs of the parent NS or of a nested NS."; + reference + "GS NFV IFA014: Section 6.4.2.2 Vnffgd information + element"; - leaf id { - type string; - } + leaf id { + type string; + } - choice constituent-base-element-id { - mandatory "true"; - container vnf-profile { - leaf vnf-profile-id { - must ". = deref(../../vnfd-profile-id)" { - } - type leafref { - path "/nfv/nsd/df/vnf-profile/id"; - } + choice constituent-base-element-id { + mandatory "true"; + container vnf-profile { + leaf vnf-profile-id { + must ". = deref(../../vnfd-profile-id)" { + } + type leafref { + path "../../../../../nsd/df/vnf-profile/id"; } } - container pnf-profile { - leaf pnf-profile-id { - must ". = deref(../../pnfd-profile-id)" { - } - type leafref { - path "/nfv/nsd/df/pnf-profile/id"; - } + } + container pnf-profile { + leaf pnf-profile-id { + must ". = deref(../../pnfd-profile-id)" { + } + type leafref { + path "../../../../../nsd/df/pnf-profile/id"; } } - container ns-profile { - leaf ns-profile-id { - must ". = deref(../../ns-profile-id)" { - } - type leafref { - path "/nfv/nsd/df/ns-profile/id"; - } + } + container ns-profile { + leaf ns-profile-id { + must ". = deref(../../ns-profile-id)" { + } + type leafref { + path "../../../../../nsd/df/ns-profile/id"; } } - description - "Reference to the profile of an NS constituent."; - reference - "GS NFV IFA014: Section 6.4.8 CpdInConstituentElement - information element"; } + description + "Reference to the profile of an NS constituent."; + reference + "GS NFV IFA014: Section 6.4.8 CpdInConstituentElement + information element"; + } - choice constituent-cpd-id { - container vnf { - leaf vnfd-id { - must ". = deref(../../vnfd-profile-id)/../vnfd-id" { - } - type leafref { - path "/nfv/vnfd/id"; - } + choice constituent-cpd-id { + container vnf { + leaf vnfd-id { + must ". = deref(../../vnfd-profile-id)/../vnfd-id" { } - leaf cpd-id { - type leafref { - path "deref(../vnfd-id)/../nfv:ext-cpd/nfv:id"; - } + type leafref { + path "../../../../../vnfd/id"; } } - container pnf { - leaf pnfd-id { - must ". = deref(../../pnfd-profile-id)/../pnfd-id" { - } - type leafref { - path "/nfv/pnfd/id"; - } - } - leaf pnf-cpd-id { - type leafref { - path "deref(../pnfd-id)/../nfv:ext-cpd/nfv:id"; - } + leaf cpd-id { + type leafref { + path "deref(../vnfd-id)/../ext-cpd/id"; } } - container ns { - leaf nsd-id { - must ". = deref(../../nested-ns-profile-id)/" + - "../nsd-id" { - } - - type leafref { - path "/nfv/nsd/id"; - } + } + container pnf { + leaf pnfd-id { + must ". = deref(../../pnfd-profile-id)/../pnfd-id" { + } + type leafref { + path "../../../../../pnfd/id"; } - leaf sap-cpd-id { - type leafref { - path "deref(../nsd-id)/../nfv:sapd/nfv:id"; - } + } + leaf pnf-cpd-id { + type leafref { + path "deref(../pnfd-id)/../ext-cpd/id"; } } - description - "A reference to the descriptor of a connection point - attached to one of the constituent VNFs and PNFs or to - the descriptor of a NS SAP."; - reference - "GS NFV IFA014: Section 6.4.4.2 CpdPool information - element"; } - } + container ns { + leaf nsd-id { + must ". = deref(../../nested-ns-profile-id)/" + + "../nsd-id" { + } - list nfpd { + type leafref { + path "../../../../../nsd/id"; + } + } + leaf sap-cpd-id { + type leafref { + path "deref(../nsd-id)/../sapd/id"; + } + } + } + description + "A reference to the descriptor of a connection point + attached to one of the constituent VNFs and PNFs or to + the descriptor of a NS SAP."; + reference + "GS NFV IFA014: Section 6.4.4.2 CpdPool information + element"; + } + } + + list nfpd { + key "id"; + + description + "The network forwarding path associated to the VNFFG."; + reference + "GS NFV IFA014: Section 6.4.2.2 Vnffgd information + element"; + + leaf id { + type string; + description + "Identifies this nfpd information element within a + VNFFGD."; + reference + "GS NFV IFA014: Section 6.4.3.2 Nfpd information + element"; + } + + leaf rule { + type string; + description + "Provides an NFP classification and selection rule. + The rule may be expressed as a criteria constructed + out of atomic assertions linked by Boolean operators + AND, OR and NOT."; + reference + "GS NFV IFA014: Section 6.4.3.2 Nfpd information + element"; + } + + list position-desc-id { key "id"; description - "The network forwarding path associated to the VNFFG."; + "Describes a position in the NFP in terms of one or + more CP profiles and rules for distributing the + traffic among CP and SAP instances created from the + CPD or SAPD associated to these profiles. This shall + be connection point profile, which is either a CPD + associated with the VnfProfile of a constituent VNF, + or a CPD associated with the PnfProfile of a + constituent PNF, or a SAPD associated with the + NsProfile of a nested NS. The related VnfProfile, + PnfProfile and NsProfile shall be included in the + parent VNFFGD."; reference - "GS NFV IFA014: Section 6.4.2.2 Vnffgd information + "GS NFV IFA014: Section 6.4.3.2 Nfpd information element"; leaf id { type string; description - "Identifies this nfpd information element within a - VNFFGD."; - reference - "GS NFV IFA014: Section 6.4.3.2 Nfpd information - element"; - } - - leaf rule { - type string; - description - "Provides an NFP classification and selection rule. - The rule may be expressed as a criteria constructed - out of atomic assertions linked by Boolean operators - AND, OR and NOT."; + "Identifier of this NfpPositionDesc element."; reference - "GS NFV IFA014: Section 6.4.3.2 Nfpd information - element"; + "GS NFV IFA014: Section 6.4.5.2 NfpPositionDesc + information element"; } - list position-desc-id { + list cp-profile-id { key "id"; description - "Describes a position in the NFP in terms of one or - more CP profiles and rules for distributing the - traffic among CP and SAP instances created from the - CPD or SAPD associated to these profiles. This shall - be connection point profile, which is either a CPD - associated with the VnfProfile of a constituent VNF, - or a CPD associated with the PnfProfile of a - constituent PNF, or a SAPD associated with the - NsProfile of a nested NS. The related VnfProfile, - PnfProfile and NsProfile shall be included in the - parent VNFFGD."; + "References the profile of a connection point to be + traversed by the traffic flows matching the criteria. + This shall be a connection point attached to one of + the constituent VNFs and PNFs of the parent VNFFG, + or a SAP of one of the constituent nested NSs of the + parent VNFFG."; reference - "GS NFV IFA014: Section 6.4.3.2 Nfpd information - element"; + "GS NFV IFA014: Section 6.4.5.2 NfpPositionDesc + information element"; leaf id { type string; description - "Identifier of this NfpPositionDesc element."; + "Identifier of this CpProfile information element. + It uniquely identifies a CpProfile."; reference - "GS NFV IFA014: Section 6.4.5.2 NfpPositionDesc + "GS NFV IFA014: Section 6.4.6.2 CpProfile information element"; } - list cp-profile-id { + list constituent-profile-elements { key "id"; description - "References the profile of a connection point to be - traversed by the traffic flows matching the criteria. - This shall be a connection point attached to one of - the constituent VNFs and PNFs of the parent VNFFG, - or a SAP of one of the constituent nested NSs of the - parent VNFFG."; + "Specifies the constituents of the CpProfile."; reference - "GS NFV IFA014: Section 6.4.5.2 NfpPositionDesc + "GS NFV IFA014: Section 6.4.6.2 CpProfile information element"; leaf id { type string; description - "Identifier of this CpProfile information element. - It uniquely identifies a CpProfile."; + "Specifies the constituents of the CpProfile."; reference - "GS NFV IFA014: Section 6.4.6.2 CpProfile - information element"; + "GS NFV IFA014: Section 6.4.7.2 + ConstituentProfileElements information element"; } - list constituent-profile-elements { - key "id"; - + leaf cpd-id { + type string; description - "Specifies the constituents of the CpProfile."; + "References the VNF external CPD for a given + VnfProfile, or the PNF external CPD for a given + PnfProfile, or a NS SAPD for a give NsProfile + identified by the constituentBasedElementId."; reference - "GS NFV IFA014: Section 6.4.6.2 CpProfile - information element"; - - leaf id { - type string; - description - "Specifies the constituents of the CpProfile."; - reference - "GS NFV IFA014: Section 6.4.7.2 - ConstituentProfileElements information element"; - } - - leaf cpd-id { - type string; - description - "References the VNF external CPD for a given - VnfProfile, or the PNF external CPD for a given - PnfProfile, or a NS SAPD for a give NsProfile - identified by the constituentBasedElementId."; - reference - "GS NFV IFA014: Section 6.4.7.2 - ConstituentProfileElements information element"; - } + "GS NFV IFA014: Section 6.4.7.2 + ConstituentProfileElements information element"; } } } } } + } - leaf-list autoscale-rule { + leaf-list autoscale-rule { + type string; + } + list lifecycle-management-script { + key "event"; + leaf event { type string; } - list lifecycle-management-script { - key "event"; - leaf event { - type string; - } - leaf script { - type string; - } + leaf script { + type string; } + } - list df { - min-elements 1; - must "default-instantiation-level or " + - "count(ns-instantiation-level) = 1" { - error-message - "default-instantiation-level must be present if there " + - "multiple instantion-level"; - reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + list df { + min-elements 1; + must "default-instantiation-level or " + + "count(ns-instantiation-level) = 1" { + error-message + "default-instantiation-level must be present if there " + + "multiple instantion-level"; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + } + + key "id"; + description + "Identifies a DF within the scope of an NSD."; + reference + "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor + information element"; + + leaf id { + type string; + description + "Identifies this NsDf information element. It identifies + a NS DF within the NSD."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + } + + leaf flavour-key { + type leafref { + path "../monitored-info/id"; } + description + "Assurance parameter against which this flavour is being + described. + The key can be a combination of multiple assurance + parameters with a logical relationship between them. + The parameters should be present as a monitoredInfo + attribute in the NSD."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + } + + list vnf-profile { + must "min-number-of-instances <= max-number-of-instances"; + must "boolean(../../vnfd-id[.=current()/vnfd-id])" { + error-message "VNFDs in the profile has to be listed as a " + + "dependency of the network service " + + "descriptor."; + } key "id"; description - "Identifies a DF within the scope of an NSD."; + "VNF profile to be used for the NS flavour."; reference - "GS NFV IFA014: Section 6.2.2.2 Network Service Descriptor - information element"; + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; leaf id { type string; description - "Identifies this NsDf information element. It identifies - a NS DF within the NSD."; + "Identifier of this vnfProfile information element. It + uniquely identifies a VnfProfile."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.3.3.2 VnfProfile information + element"; } - leaf flavour-key { + leaf vnfd-id { + mandatory true; type leafref { - path "../monitored-info/id"; + path "../../../../vnfd/id"; } description - "Assurance parameter against which this flavour is being - described. + "References a VNFD."; + reference + "GS NFV IFA014: Section 6.3.3.2 VnfProfile information + element"; + } - The key can be a combination of multiple assurance - parameters with a logical relationship between them. - The parameters should be present as a monitoredInfo - attribute in the NSD."; + leaf flavour-id { + mandatory true; + type leafref { + path "deref(../vnfd-id)/../df/id"; + } + description + "Identifies a flavour within the VNFD."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.3.3.2 VnfProfile information + element"; } - list vnf-profile { - must "min-number-of-instances <= max-number-of-instances"; - must "boolean(../../vnfd-id[.=current()/vnfd-id])" { - error-message "VNFDs in the profile has to be listed as a " + - "dependency of the network service " + - "descriptor."; + leaf instantiation-level { + mandatory true; + type leafref { + path "deref(../flavour-id)/../instantiation-level/id"; } + description + "Identifier of the instantiation level of the VNF DF + to be used for instantiation. If not present, the + default instantiation level as declared in the VNFD + shall be used."; + reference + "GS NFV IFA014: Section 6.3.3.2 VnfProfile information + element"; + } + + leaf min-number-of-instances { + default 1; + type uint16; + description + "Minimum number of instances of the VNF based on this + VNFD that is permitted to exist for this VnfProfile."; + reference + "GS NFV IFA014: Section 6.3.3.2 VnfProfile information + element"; + } + + leaf max-number-of-instances { + default 1; + type uint16; + description + "Maximum number of instances of the VNF based on this + VNFD that is permitted to exist for this VnfProfile."; + reference + "GS NFV IFA014: Section 6.3.3.2 VnfProfile information + element"; + } + + uses local-affinity-or-anti-affinity-rule; + + list affinity-or-anti-affinity-group { key "id"; + description - "VNF profile to be used for the NS flavour."; + "Identifier(s) of the affinity or anti-affinity + group(s) the VnfProfile belongs to."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.3.3.2 VnfProfile information + element"; leaf id { - type string; - description - "Identifier of this vnfProfile information element. It - uniquely identifies a VnfProfile."; - reference - "GS NFV IFA014: Section 6.3.3.2 VnfProfile information - element"; - } - - leaf vnfd-id { - mandatory true; type leafref { - path "/nfv/vnfd/id"; + path "../../../affinity-or-anti-affinity-group/id"; } - description - "References a VNFD."; - reference - "GS NFV IFA014: Section 6.3.3.2 VnfProfile information - element"; } + } - leaf flavour-id { - mandatory true; - type leafref { - path "deref(../vnfd-id)/../df/id"; - } - description - "Identifies a flavour within the VNFD."; - reference - "GS NFV IFA014: Section 6.3.3.2 VnfProfile information + list virtual-link-connectivity { + key "virtual-link-profile-id"; + + description + "Defines the connection information of the VNF, it + contains connection relationship between a VNF + connection point and a NS Virtual Link."; + reference + "GS NFV IFA014: Section 6.3.3.2 VnfProfile information element"; - } - leaf instantiation-level { - mandatory true; + leaf virtual-link-profile-id { type leafref { - path "deref(../flavour-id)/../instantiation-level/id"; + path "../../../virtual-link-profile/id"; } description - "Identifier of the instantiation level of the VNF DF - to be used for instantiation. If not present, the - default instantiation level as declared in the VNFD - shall be used."; - reference - "GS NFV IFA014: Section 6.3.3.2 VnfProfile information - element"; - } - - leaf min-number-of-instances { - default 1; - type uint16; - description - "Minimum number of instances of the VNF based on this - VNFD that is permitted to exist for this VnfProfile."; - reference - "GS NFV IFA014: Section 6.3.3.2 VnfProfile information - element"; - } - - leaf max-number-of-instances { - default 1; - type uint16; - description - "Maximum number of instances of the VNF based on this - VNFD that is permitted to exist for this VnfProfile."; + "Reference an NS VL profile."; reference - "GS NFV IFA014: Section 6.3.3.2 VnfProfile information - element"; + "GS NFV IFA014: Section 6.3.7.2, NsVirutalLinkConnectivity + information element."; } - uses local-affinity-or-anti-affinity-rule; - - list affinity-or-anti-affinity-group { - key "id"; + list constituent-cpd-id { + key "constituent-base-element-id"; description - "Identifier(s) of the affinity or anti-affinity - group(s) the VnfProfile belongs to."; + "Describes a connection point on a VNF/PNF or a SAP + which connects to virtual links instantiated from + the profile identified in the virtualLinkProfileId + attribute."; reference - "GS NFV IFA014: Section 6.3.3.2 VnfProfile information - element"; + "GS NFV IFA014: Section 6.3.7 + NsVirtualLinkConnectivity information element"; - leaf id { + leaf constituent-base-element-id { type leafref { - path "../../../affinity-or-anti-affinity-group/id"; + path "../../../id"; } + description + "Reference to the profile of an NS constituent."; + reference + "GS NFV IFA014: Section 6.4.8 + CpdInConstituentElement information element"; } - } - - list virtual-link-connectivity { - key "virtual-link-profile-id"; - - description - "Defines the connection information of the VNF, it - contains connection relationship between a VNF - connection point and a NS Virtual Link."; - reference - "GS NFV IFA014: Section 6.3.3.2 VnfProfile information - element"; - leaf virtual-link-profile-id { + leaf constituent-cpd-id { type leafref { - path "../../../virtual-link-profile/id"; + path "deref(../../../vnfd-id)/../ext-cpd/id"; } description - "Reference an NS VL profile."; + "A reference to the descriptor of a connection point + attached to one of the constituent VNFs and PNFs or to + the descriptor of a NS SAP."; reference - "GS NFV IFA014: Section 6.3.7.2, NsVirutalLinkConnectivity - information element."; + "GS NFV IFA014: Section 6.4.4.2 CpdPool information + element"; } + } + } + } - list constituent-cpd-id { - key "constituent-base-element-id"; - - description - "Describes a connection point on a VNF/PNF or a SAP - which connects to virtual links instantiated from - the profile identified in the virtualLinkProfileId - attribute."; - reference - "GS NFV IFA014: Section 6.3.7 - NsVirtualLinkConnectivity information element"; + list pnf-profile { + key "id"; + must "boolean(../../pnfd-id[.=current()/pnfd-id])" { + error-message "PNFDs in the profile has to be listed as a " + + "dependency of the network service " + + "descriptor."; + } - leaf constituent-base-element-id { - type leafref { - path "../../../id"; - } - description - "Reference to the profile of an NS constituent."; - reference - "GS NFV IFA014: Section 6.4.8 - CpdInConstituentElement information element"; - } + leaf id { + type string; + description + "Identifier of this PnfProfile information element. + It uniquely identifies a PnfProfile."; + reference + "GS NFV IFA014: Section 6.3.6.2 PnfProfile information + element"; + } - leaf constituent-cpd-id { - type leafref { - path "deref(../../../vnfd-id)/../nfv:ext-cpd/nfv:id"; - } - description - "A reference to the descriptor of a connection point - attached to one of the constituent VNFs and PNFs or to - the descriptor of a NS SAP."; - reference - "GS NFV IFA014: Section 6.4.4.2 CpdPool information - element"; - } - } + leaf pnfd-id { + type leafref { + path "../../../../pnfd/id"; } + description + "References a PNFD."; + reference + "GS NFV IFA014: Section 6.3.6.2 PnfProfile information + element"; } - list pnf-profile { - key "id"; - must "boolean(../../pnfd-id[.=current()/pnfd-id])" { - error-message "PNFDs in the profile has to be listed as a " + - "dependency of the network service " + - "descriptor."; - } + list virtual-link-connectivity { + key "virtual-link-profile-id"; - leaf id { - type string; - description - "Identifier of this PnfProfile information element. - It uniquely identifies a PnfProfile."; - reference - "GS NFV IFA014: Section 6.3.6.2 PnfProfile information - element"; - } + description + "Defines the connection information of the PNF, it + contains connection relationship between a PNF + connection point and a NS Virtual Link."; + reference + "GS NFV IFA014: Section 6.3.6.2 PnfProfile information + element"; - leaf pnfd-id { + leaf virtual-link-profile-id { type leafref { - path "/nfv/pnfd/id"; + path "../../../virtual-link-profile/id"; } description - "References a PNFD."; + "Reference an NS VL profile."; reference - "GS NFV IFA014: Section 6.3.6.2 PnfProfile information - element"; + "GS NFV IFA014: Section 6.3.7.2, NsVirutalLinkConnectivity + information element."; } - list virtual-link-connectivity { - key "virtual-link-profile-id"; + list constituent-cpd-id { + key "constituent-base-element-id"; description - "Defines the connection information of the PNF, it - contains connection relationship between a PNF - connection point and a NS Virtual Link."; + "Describes a connection point on a VNF/PNF or a SAP + which connects to virtual links instantiated from + the profile identified in the virtualLinkProfileId + attribute."; reference - "GS NFV IFA014: Section 6.3.6.2 PnfProfile information - element"; + "GS NFV IFA014: Section 6.3.7 + NsVirtualLinkConnectivity information element"; - leaf virtual-link-profile-id { + leaf constituent-base-element-id { type leafref { - path "../../../virtual-link-profile/id"; + path "../../../id"; } description - "Reference an NS VL profile."; + "Reference to the profile of an NS constituent."; reference - "GS NFV IFA014: Section 6.3.7.2, NsVirutalLinkConnectivity - information element."; + "GS NFV IFA014: Section 6.4.8 + CpdInConstituentElement information element"; } - list constituent-cpd-id { - key "constituent-base-element-id"; - + leaf constituent-cpd-id { + type leafref { + path "deref(../../../pnfd-id)/../ext-cpd/id"; + } description - "Describes a connection point on a VNF/PNF or a SAP - which connects to virtual links instantiated from - the profile identified in the virtualLinkProfileId - attribute."; + "A reference to the descriptor of a connection point + attached to one of the constituent VNFs and PNFs or to + the descriptor of a NS SAP."; reference - "GS NFV IFA014: Section 6.3.7 - NsVirtualLinkConnectivity information element"; - - leaf constituent-base-element-id { - type leafref { - path "../../../id"; - } - description - "Reference to the profile of an NS constituent."; - reference - "GS NFV IFA014: Section 6.4.8 - CpdInConstituentElement information element"; - } - - leaf constituent-cpd-id { - type leafref { - path "deref(../../../pnfd-id)/../nfv:ext-cpd/nfv:id"; - } - description - "A reference to the descriptor of a connection point - attached to one of the constituent VNFs and PNFs or to - the descriptor of a NS SAP."; - reference - "GS NFV IFA014: Section 6.4.4.2 CpdPool information - element"; - } + "GS NFV IFA014: Section 6.4.4.2 CpdPool information + element"; } } } + } - list virtual-link-profile { - key "id"; + list virtual-link-profile { + key "id"; + description + "VL profile to be used for the NS flavour."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + + leaf id { + type string; description - "VL profile to be used for the NS flavour."; + "Uniquely identifies this VirtualLinkProfile + information element."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.3.2.2 VirtualLinkProfile + information element"; + } - leaf id { - type string; - description - "Uniquely identifies this VirtualLinkProfile - information element."; - reference - "GS NFV IFA014: Section 6.3.2.2 VirtualLinkProfile - information element"; + leaf virtual-link-desc-id { + mandatory true; + type leafref { + path "../../../virtual-link-desc/id"; } + description + "Uniquely references a VLD."; + reference + "GS NFV IFA014: Section 6.3.2.2 VirtualLinkProfile + information element"; + } - leaf virtual-link-desc-id { - mandatory true; - type leafref { - path "../../../virtual-link-desc/id"; - } - description - "Uniquely references a VLD."; - reference - "GS NFV IFA014: Section 6.3.2.2 VirtualLinkProfile - information element"; + leaf flavour-id { + mandatory true; + type leafref { + path "deref(../virtual-link-desc-id)/../df/id"; } + description + "Identifies a flavour within the VLD."; + reference + "GS NFV IFA014: Section 6.3.2.2 VirtualLinkProfile + information element"; + } - leaf flavour-id { - mandatory true; + uses local-affinity-or-anti-affinity-rule; + + list affinity-or-anti-affinity-group { + key "id"; + + description + "Identifies an affinity or anti-affinity group the + VLs instantiated according to the VlProfile belong + to."; + reference + "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile + information element"; + + leaf id { type leafref { - path "deref(../virtual-link-desc-id)/../df/id"; + path "../../../affinity-or-anti-affinity-group/id"; } - description - "Identifies a flavour within the VLD."; - reference - "GS NFV IFA014: Section 6.3.2.2 VirtualLinkProfile - information element"; } + } - uses local-affinity-or-anti-affinity-rule; - - list affinity-or-anti-affinity-group { - key "id"; - - description - "Identifies an affinity or anti-affinity group the - VLs instantiated according to the VlProfile belong - to."; - reference - "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile - information element"; + container max-bitrate-requirements { + description + "Specifies the maximum bitrate requirements for a VL + instantiated according to this profile."; + reference + "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile + information element"; + uses link-bitrate-requirements; + } + container min-bitrate-requirements { + description + "Specifies the minimum bitrate requirements for a VL + instantiated according to this profile."; + reference + "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile + information element"; + uses link-bitrate-requirements; + } + } - leaf id { - type leafref { - path "../../../affinity-or-anti-affinity-group/id"; - } - } - } + list scaling-aspect { + key "id"; - container max-bitrate-requirements { - description - "Specifies the maximum bitrate requirements for a VL - instantiated according to this profile."; - reference - "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile - information element"; - uses link-bitrate-requirements; - } - container min-bitrate-requirements { - description - "Specifies the minimum bitrate requirements for a VL - instantiated according to this profile."; - reference - "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile - information element"; - uses link-bitrate-requirements; - } + description + "The scaling aspects supported by this DF of the NS."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + + leaf id { + type string; + description + "Identifier of this NsScalingAspect information element. + It uniquely identifies the NS scaling aspect in an + NSD."; + reference + "GS NFV IFA014: Section 6.7.2.2 NsScalingAspect + information element"; } - list scaling-aspect { - key "id"; + leaf name { + type string; + description + "Provides a human readable name of the NS scaling + aspect."; + reference + "GS NFV IFA014: Section 6.7.2.2 NsScalingAspect + information element"; + } + leaf description { + type string; description - "The scaling aspects supported by this DF of the NS."; + "Provides a human readable description of the NS + scaling aspect."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.7.2.2 NsScalingAspect + information element"; + } - leaf id { - type string; - description - "Identifier of this NsScalingAspect information element. - It uniquely identifies the NS scaling aspect in an - NSD."; - reference - "GS NFV IFA014: Section 6.7.2.2 NsScalingAspect - information element"; + leaf scaling-level { + type leafref { + path "../../ns-instantiation-level/id"; } + description + "Describes the details of an NS level."; + reference + "GS NFV IFA014: Section 6.7.2.2 NsScalingAspect + information element"; + } + } - leaf name { - type string; - description - "Provides a human readable name of the NS scaling - aspect."; - reference - "GS NFV IFA014: Section 6.7.2.2 NsScalingAspect - information element"; - } + list affinity-or-anti-affinity-group { + key "id"; - leaf description { - type string; - description - "Provides a human readable description of the NS - scaling aspect."; - reference - "GS NFV IFA014: Section 6.7.2.2 NsScalingAspect - information element"; - } + description + "Specifies affinity or anti-affinity relationship + applicable between the VNF instances created using + different VNFDs, the Virtual Link instances created + using different NsVirtualLinkDescs or the nested NS + instances created using different NSDs in the same + affinity or anti-affinity group."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; - leaf scaling-level { - type leafref { - path "../../ns-instantiation-level/id"; - } - description - "Describes the details of an NS level."; - reference - "GS NFV IFA014: Section 6.7.2.2 NsScalingAspect - information element"; - } + leaf id { + type string; + description + "Identifier of Identifier of this + AffinityOrAntiAffinityGroup information element."; + reference + "GS NFV IFA014: Section 6.3.5.2 AffinityOrAntiAffinity + information element"; } - list affinity-or-anti-affinity-group { - key "id"; + leaf type { + mandatory true; + type affinity-type; + description + "Specifies the type of relationship that the members of + the group have: 'affinity' or 'anti-affinity.'"; + reference + "GS NFV IFA014: Section 6.3.5.2 AffinityOrAntiAffinity + information element"; + } + leaf scope { + mandatory true; + type affinity-scope; description - "Specifies affinity or anti-affinity relationship - applicable between the VNF instances created using - different VNFDs, the Virtual Link instances created - using different NsVirtualLinkDescs or the nested NS - instances created using different NSDs in the same - affinity or anti-affinity group."; + "Specifies the scope of the affinity or anti-affinity + relationship e.g. a NFVI node, an NFVI PoP, etc."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.3.5.2 AffinityOrAntiAffinity + information element"; + } + } - leaf id { - type string; - description - "Identifier of Identifier of this - AffinityOrAntiAffinityGroup information element."; - reference - "GS NFV IFA014: Section 6.3.5.2 AffinityOrAntiAffinity - information element"; - } + list ns-instantiation-level { + min-elements 1; + key "id"; - leaf affinity-type { - mandatory true; - type affinity-type; + description + "Describes the details of an NS level."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element + GS NFV IFA014: Section 6.7.2.2 NsScaling information + element"; + + leaf id { + type string; + description + "Identifier of this NsLevel information element. It + uniquely identifies an NS level within the DF."; + reference + "GS NFV IFA014: Section 6.3.9.2 NsLevel information + element"; + } + + leaf description { + type string; + description + "Human readable description of the NS level."; + reference + "GS NFV IFA014: Section 6.3.9.2 NsLevel information + element"; + } + + list vnf-to-level-mapping { + key "vnf-profile-id"; + + description + "Specifies the profile of the VNFs involved in this NS + level and, for each of them, the required number of + instances."; + reference + "GS NFV IFA014: Section 6.3.9.2 NsLevel information + element"; + + leaf vnf-profile-id { + type leafref { + path "../../../vnf-profile/id"; + } description - "Specifies the type of relationship that the members of - the group have: 'affinity' or 'anti-affinity.'"; + "Identifies the profile to be used for a VNF + involved in an NS level."; reference - "GS NFV IFA014: Section 6.3.5.2 AffinityOrAntiAffinity + "GS NFV IFA014: Section 6.7.4.2 VnfToLevelMapping information element"; } - leaf affinity-scope { - mandatory true; - type affinity-scope; + leaf number-of-instances { + default 1; + type uint32; description - "Specifies the scope of the affinity or anti-affinity - relationship e.g. a NFVI node, an NFVI PoP, etc."; + "Specifies the number of VNF instances required for + an NS level."; reference - "GS NFV IFA014: Section 6.3.5.2 AffinityOrAntiAffinity + "GS NFV IFA014: Section 6.7.4.2 VnfToLevelMapping information element"; } } - list ns-instantiation-level { - min-elements 1; - key "id"; + list virtual-link-to-level-mapping { + key "virtual-link-profile-id"; description - "Describes the details of an NS level."; + "Specifies the profile of the VLs involved in this NS + level and, for each of them, the needed bandwidth."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element - GS NFV IFA014: Section 6.7.2.2 NsScaling information + "GS NFV IFA014: Section 6.3.9.2 NsLevel information element"; - leaf id { - type string; + leaf virtual-link-profile-id { + type leafref { + path "../../../virtual-link-profile/id"; + } description - "Identifier of this NsLevel information element. It - uniquely identifies an NS level within the DF."; + "Identifies the profile to be used for a VL involved + in an NS level."; reference - "GS NFV IFA014: Section 6.3.9.2 NsLevel information - element"; + "GS NFV IFA014: Section 6.7.5.2 + VirtualLinkToLevelMapping information element"; } - leaf description { - type string; - description - "Human readable description of the NS level."; - reference - "GS NFV IFA014: Section 6.3.9.2 NsLevel information - element"; - } + uses link-bitrate-requirements; + } + + list ns-to-level-mapping { + key "ns-profile-id"; - list vnf-to-level-mapping { - key "vnf-profile-id"; + description + "Specifies the profile of the nested NSs involved in + this NS level and, for each of them, the required + number of instances."; + reference + "GS NFV IFA014: Section 6.3.9.2 NsLevel information + element"; + leaf ns-profile-id { + type leafref { + path "../../../ns-profile/id"; + } description - "Specifies the profile of the VNFs involved in this NS - level and, for each of them, the required number of - instances."; + "Identifies the profile to be used for a nested NS + involved in the NS level."; reference - "GS NFV IFA014: Section 6.3.9.2 NsLevel information + "GS NFV IFA014: Section 6.7.6.2 NsToLevel information element"; - - leaf vnf-profile-id { - type leafref { - path "../../../vnf-profile/id"; - } - description - "Identifies the profile to be used for a VNF - involved in an NS level."; - reference - "GS NFV IFA014: Section 6.7.4.2 VnfToLevelMapping - information element"; - } - - leaf number-of-instances { - default 1; - type uint32; - description - "Specifies the number of VNF instances required for - an NS level."; - reference - "GS NFV IFA014: Section 6.7.4.2 VnfToLevelMapping - information element"; - } } - list virtual-link-to-level-mapping { - key "virtual-link-profile-id"; - + leaf number-of-instances { + default 1; + type uint32; description - "Specifies the profile of the VLs involved in this NS - level and, for each of them, the needed bandwidth."; + "Specifies the number of nested NS instances required + for the NS scale level."; reference - "GS NFV IFA014: Section 6.3.9.2 NsLevel information + "GS NFV IFA014: Section 6.7.6.2 NsToLevel information element"; + } + } - leaf virtual-link-profile-id { - type leafref { - path "../../../virtual-link-profile/id"; - } - description - "Identifies the profile to be used for a VL involved - in an NS level."; - reference - "GS NFV IFA014: Section 6.7.5.2 - VirtualLinkToLevelMapping information element"; - } + must "(count(vnf-to-level-mapping) + " + + "count(virtual-link-to-level-mapping) + " + + "count(ns-to-level-mapping)) > 0" { + error-message + "At least one attribute between " + + "vnf-to-level-mapping, " + + "virtual-link-to-level-mapping and " + + "ns-to-level-mapping shall be present."; + description + "At least one attribute between vnfToLevelMapping, + vlirtualLinkToLevelMapping and nsToLevelMapping shall + be present."; + reference + "GS NFV IFA014: Section 6.3.9.2 NsLevel information + element"; + } + } - uses link-bitrate-requirements; - } + leaf default-instantiation-level { + type leafref { + path "../ns-instantiation-level/id"; + } + description + "Identifies the NS level which represents the default NS + instantiation level for this DF. It shall be present if + there are multiple 'nsIinstantiationLevel' entries."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + } - list ns-to-level-mapping { - key "ns-profile-id"; + list ns-profile { + must "min-number-of-instances <= max-number-of-instances" { + error-message + "min-number-of-instances has to be less than or equal" + + "max-number-of-instances."; + } + must "boolean(../../nested-nsd-id[.=current()/nsd-id])" { + error-message + "PNFDs in the profile has to be listed as a " + + "dependency of the network service " + + "descriptor."; + } + key "id"; - description - "Specifies the profile of the nested NSs involved in - this NS level and, for each of them, the required - number of instances."; - reference - "GS NFV IFA014: Section 6.3.9.2 NsLevel information - element"; + description + "Specifies a NS Profile supported by this NS DF."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; - leaf ns-profile-id { - type leafref { - path "../../../ns-profile/id"; - } - description - "Identifies the profile to be used for a nested NS - involved in the NS level."; - reference - "GS NFV IFA014: Section 6.7.6.2 NsToLevel information - element"; - } + leaf id { + type string; + description + "Identifies an NS profile."; + reference + "GS NFV IFA014: Section 6.3.11.2 NsProfile information + element"; + } - leaf number-of-instances { - default 1; - type uint32; - description - "Specifies the number of nested NS instances required - for the NS scale level."; - reference - "GS NFV IFA014: Section 6.7.6.2 NsToLevel information - element"; - } + leaf nsd-id { + mandatory true; + type leafref { + path "../../../../nsd/id"; } + description + "Identifies the NSD applicable to NS instantiated + according to this profile."; + reference + "GS NFV IFA014: Section 6.3.11.2 NsProfile information + element"; + } - must "(count(vnf-to-level-mapping) + " + - "count(virtual-link-to-level-mapping) + " + - "count(ns-to-level-mapping)) > 0" { - error-message "At least one attribute between " + - "vnf-to-level-mapping, " + - "virtual-link-to-level-mapping and " + - "ns-to-level-mapping shall be present."; - description - "At least one attribute between vnfToLevelMapping, - vlirtualLinkToLevelMapping and nsToLevelMapping shall - be present."; - reference - "GS NFV IFA014: Section 6.3.9.2 NsLevel information - element"; + leaf ns-df-id { + mandatory true; + type leafref { + path "deref(../nsd-id)/../df/id"; } + description + "Identifies the applicable network service DF within + the scope of the NSD."; + reference + "GS NFV IFA014: Section 6.3.11.2 NsProfile information + element"; } - leaf default-instantiation-level { + leaf instantiation-level-id { + mandatory true; type leafref { - path "../ns-instantiation-level/id"; + path "deref(../ns-df-id)/../ns-instantiation-level/id"; } description - "Identifies the NS level which represents the default NS - instantiation level for this DF. It shall be present if - there are multiple 'nsIinstantiationLevel' entries."; + "Identifies the NS level within the referenced NS DF to + be used in the context of the parent NS instantiation. + If not present, the default NS instantiation level as + declared in the referenced NSD shall be used."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.3.11.2 NsProfile information + element"; } - list ns-profile { - must "min-number-of-instances <= max-number-of-instances" { - error-message - "min-number-of-instances has to be less than or equal" + - "max-number-of-instances."; - } - must "boolean(../../nested-nsd-id[.=current()/nsd-id])" { - error-message "PNFDs in the profile has to be listed as a " + - "dependency of the network service " + - "descriptor."; - } + leaf min-number-of-instances { + type uint16; + default 1; + description + "Minimum number of nested NS instances based on the + referenced NSD that is permitted to exist for this + NsProfile."; + reference + "GS NFV IFA014: Section 6.3.11.2 NsProfile information + element"; + } + + leaf max-number-of-instances { + type uint16; + default 1; + description + "Maximum number of nested NS instances based on the + referenced NSD that is permitted to exist for this + NsProfile."; + reference + "GS NFV IFA014: Section 6.3.11.2 NsProfile information + element"; + } + + list affinity-or-anti-affinity-group-id { key "id"; description - "Specifies a NS Profile supported by this NS DF."; + "Identifies an affinity or anti-affinity group the NSs + created according to this NsProfile belongs to."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.3.11.2 NsProfile information + element"; leaf id { - type string; - description - "Identifies an NS profile."; - reference - "GS NFV IFA014: Section 6.3.11.2 NsProfile information - element"; - } - leaf nsd-id { - mandatory true; - type leafref { - path "/nfv/nsd/id"; - } - description - "Identifies the NSD applicable to NS instantiated - according to this profile."; - reference - "GS NFV IFA014: Section 6.3.11.2 NsProfile information - element"; - } - leaf ns-df-id { - mandatory true; type leafref { - path "deref(../nsd-id)/../df/id"; + path "../../../affinity-or-anti-affinity-group/id"; } - description - "Identifies the applicable network service DF within - the scope of the NSD."; - reference - "GS NFV IFA014: Section 6.3.11.2 NsProfile information - element"; } - leaf instantiation-level-id { - mandatory true; + } + + list virtual-link-connectivity { + key "virtual-link-profile-id"; + + leaf virtual-link-profile-id { type leafref { - path "deref(../ns-df-id)/../ns-instantiation-level/id"; + path "../../../virtual-link-profile/id"; } description - "Identifies the NS level within the referenced NS DF to - be used in the context of the parent NS instantiation. - If not present, the default NS instantiation level as - declared in the referenced NSD shall be used."; - reference - "GS NFV IFA014: Section 6.3.11.2 NsProfile information - element"; - } - - leaf min-number-of-instances { - type uint16; - default 1; - description - "Minimum number of nested NS instances based on the - referenced NSD that is permitted to exist for this - NsProfile."; - reference - "GS NFV IFA014: Section 6.3.11.2 NsProfile information - element"; - } - leaf max-number-of-instances { - type uint16; - default 1; - description - "Maximum number of nested NS instances based on the - referenced NSD that is permitted to exist for this - NsProfile."; + "Reference an NS VL profile."; reference - "GS NFV IFA014: Section 6.3.11.2 NsProfile information - element"; + "GS NFV IFA014: Section 6.3.7.2, NsVirutalLinkConnectivity + information element."; } - list affinity-or-anti-affinity-group-id { - key "id"; + list constituent-cpd-id { + key "constituent-base-element-id"; description - "Identifies an affinity or anti-affinity group the NSs - created according to this NsProfile belongs to."; + "Describes a connection point on a VNF/PNF or a SAP + which connects to virtual links instantiated from + the profile identified in the virtualLinkProfileId + attribute."; reference - "GS NFV IFA014: Section 6.3.11.2 NsProfile information - element"; + "GS NFV IFA014: Section 6.3.7 + NsVirtualLinkConnectivity information element"; - leaf id { + leaf constituent-base-element-id { type leafref { - path "../../../affinity-or-anti-affinity-group/id"; + path "../../../id"; } + description + "Reference to the profile of an NS constituent."; + reference + "GS NFV IFA014: Section 6.4.8 + CpdInConstituentElement information element"; } - } - - list virtual-link-connectivity { - key "virtual-link-profile-id"; - leaf virtual-link-profile-id { + leaf constituent-cpd-id { type leafref { - path "../../../virtual-link-profile/id"; + path "deref(../../../nsd-id)/../sapd/id"; } description - "Reference an NS VL profile."; + "A reference to the descriptor of a connection point + attached to one of the constituent VNFs and PNFs or to + the descriptor of a NS SAP."; reference - "GS NFV IFA014: Section 6.3.7.2, NsVirutalLinkConnectivity - information element."; + "GS NFV IFA014: Section 6.4.4.2 CpdPool information + element"; } + } + } + } - list constituent-cpd-id { - key "constituent-base-element-id"; + list dependencies { + key "id"; - description - "Describes a connection point on a VNF/PNF or a SAP - which connects to virtual links instantiated from - the profile identified in the virtualLinkProfileId - attribute."; - reference - "GS NFV IFA014: Section 6.3.7 - NsVirtualLinkConnectivity information element"; + description + "Specifies the order in which instances of the VNFs and/or + nested NSs have to be created."; + reference + "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; - leaf constituent-base-element-id { - type leafref { - path "../../../id"; - } - description - "Reference to the profile of an NS constituent."; - reference - "GS NFV IFA014: Section 6.4.8 - CpdInConstituentElement information element"; - } + leaf id { + type string; + } - leaf constituent-cpd-id { - type leafref { - path "deref(../../../nsd-id)/../nfv:sapd/nfv:id"; - } - description - "A reference to the descriptor of a connection point - attached to one of the constituent VNFs and PNFs or to - the descriptor of a NS SAP."; - reference - "GS NFV IFA014: Section 6.4.4.2 CpdPool information - element"; - } + choice primary-id { + leaf primary-vnf-profile { + type leafref { + path "../../vnf-profile/vnfd-id"; } - } - } - - list dependencies { - key "id"; - + } + leaf primary-ns-profile { + type leafref { + path "../../ns-profile/nsd-id"; + } + } description - "Specifies the order in which instances of the VNFs and/or - nested NSs have to be created."; + "References a VnfProfile or NsProfile."; reference - "GS NFV IFA014: Section 6.3.2.2 NsDf information element"; + "GS NFV IFA014: Section 6.3.12.2 Dependencies + information element"; + } - leaf id { - type string; + choice secondary-id { + leaf secondary-vnf-profile { + type leafref { + path "../../vnf-profile/vnfd-id"; + } } - choice primary-id { - leaf primary-vnf-profile { - type leafref { - path "../../vnf-profile/vnfd-id"; - } + leaf secondary-ns-profile { + type leafref { + path "../../ns-profile/nsd-id"; } - leaf primary-ns-profile { - type leafref { - path "../../ns-profile/nsd-id"; - } + } + description + "References a VnfProfile or NsProfile."; + reference + "GS NFV IFA014: Section 6.3.12.2 Dependencies + information element"; + } + } + + list monitored-info { + key "id"; + + leaf id { + type string; + } + + container vnf-indicator-info { + leaf vnfd-id { + type leafref { + path "../../../../../vnfd/id"; } description - "References a VnfProfile or NsProfile."; + "Identifies a VNFD."; reference - "GS NFV IFA014: Section 6.3.12.2 Dependencies + "GS NFV IFA014: Section 6.2.7.2 VnfIndicatorData information element"; } - choice secondary-id { - leaf secondary-vnf-profile { - type leafref { - path "../../vnf-profile/vnfd-id"; - } - } - leaf secondary-ns-profile { - type leafref { - path "../../ns-profile/nsd-id"; - } + + leaf vnf-indicator { + mandatory true; + type leafref { + path "deref(../vnfd-id)/../indicator/id"; } description - "References a VnfProfile or NsProfile."; + "Identifies a VNF indicator within the VNFD."; reference - "GS NFV IFA014: Section 6.3.12.2 Dependencies + "GS NFV IFA014: Section 6.2.7.2 VnfIndicatorData information element"; } + description + "Uniquely identifies this VNF Indicator information + element."; + reference + "GS NFV IFA014: Section 6.2.6.2 MonitoredData + information element"; } - list monitored-info { - key "id"; - + // monitoringParameter in IFA014 is defined by MonitoredData + // whereas monitoringParameter in IFA011 is defined by + // MonitoringParameter. + container monitoring-parameter { leaf id { type string; + description + "Unique identifier of this monitoring parameter + information element."; + reference + "GS NFV IFA014: Section 6.2.8.2 MonitoringParameter + information element"; } - container vnf-indicator-info { - leaf vnfd-id { - type leafref { - path "/nfv/vnfd/id"; - } - description - "Identifies a VNFD."; - reference - "GS NFV IFA014: Section 6.2.7.2 VnfIndicatorData - information element"; - } - leaf vnf-indicator { - mandatory true; - type leafref { - path "deref(../vnfd-id)/../indicator/id"; - } - description - "Identifies a VNF indicator within the VNFD."; - reference - "GS NFV IFA014: Section 6.2.7.2 VnfIndicatorData - information element"; - } + leaf name { + type string; description - "Uniquely identifies this VNF Indicator information - element."; + "Human readable name of the monitoring parameter."; reference - "GS NFV IFA014: Section 6.2.6.2 MonitoredData + "GS NFV IFA014: Section 6.2.8.2 MonitoringParameter information element"; } - // monitoringParameter in IFA014 is defined by MonitoredData - // whereas monitoringParameter in IFA011 is defined by - // MonitoringParameter. - container monitoring-parameter { - leaf id { - type string; - description - "Unique identifier of this monitoring parameter - information element."; - reference - "GS NFV IFA014: Section 6.2.8.2 MonitoringParameter - information element"; - } - - leaf name { - type string; - description - "Human readable name of the monitoring parameter."; - reference - "GS NFV IFA014: Section 6.2.8.2 MonitoringParameter - information element"; - } - - leaf performance-metric { - mandatory true; - type string; - description - "Defines the virtualised resource-related performance - metric."; - reference - "GS NFV IFA014: Section 6.2.8.2 MonitoringParameter - information element"; - } + leaf performance-metric { + mandatory true; + type string; + description + "Defines the virtualised resource-related performance + metric."; + reference + "GS NFV IFA014: Section 6.2.8.2 MonitoringParameter + information element"; + } - leaf collection-period { - type string; - description - "An attribute that describes the periodicity at - which to collect the performance information."; - reference - "GS NFV IFA014: Section 6.2.8.2 MonitoringParameter - information element"; - } + leaf collection-period { + type string; + description + "An attribute that describes the periodicity at + which to collect the performance information."; + reference + "GS NFV IFA014: Section 6.2.8.2 MonitoringParameter + information element"; } - } + } } - uses security-parameters; } + uses security-parameters; } } diff --git a/src/yang/etsi-nfv-nsd.yang b/src/yang/etsi-nfv-nsd.yang new file mode 100644 index 0000000000000000000000000000000000000000..52cd50858104cbfdf6de45381c30bdd3f4dc4fd6 --- /dev/null +++ b/src/yang/etsi-nfv-nsd.yang @@ -0,0 +1,62 @@ +module etsi-nfv-nsd { + yang-version 1.1; + namespace "urn:etsi:nfv:yang:etsi-nfv-nsd"; + prefix nsd; + + import etsi-nfv-descriptors { + prefix vnf; + } + + organization + "European Telecommunications Standards Institute (ETSI)"; + + description + "Network Services Descriptors"; + + revision 2019-04-25 { + description + "Initial revision. + NSD according to ETSI GS NFV-IFA 014 Ed261v252."; + } + + container nsd { + 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 vnf:vnfd; + } + + list nsd { + key "id"; + max-elements 1; + uses vnf:nsd; + description + "The NSD information element is a deployment template whose + instances are used by the NFVO for the lifecycle management + of NSs."; + reference + "GS NFV-IFA014: Section 6.2.2, Network Service Descriptor + information element"; + } + + list pnfd { + key "id"; + + description + "The Pnfd information element is a deployment template + enabling on-boarding PNFs and referencing them from an + NSD. It focuses on connectivity aspects only."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element."; + + uses vnf:pnfd; + } + } +} diff --git a/src/yang/etsi-nfv-pnf.yang b/src/yang/etsi-nfv-pnf.yang index 48499039c3757431b4ed89d5a83bccc246d73d3e..ffe5d064004831f8c62fe68b97f6811f745dfd2a 100644 --- a/src/yang/etsi-nfv-pnf.yang +++ b/src/yang/etsi-nfv-pnf.yang @@ -12,7 +12,7 @@ submodule etsi-nfv-pnf { description "Models for PNFD according to GS NFV-IFA 014."; - revision 2019-03-18 { + revision 2019-04-25 { description "Initial revision. @@ -31,87 +31,91 @@ submodule etsi-nfv-pnf { reference "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - list pnfd { + leaf id { + type string; + description + "Identifier of this Pnfd information element. It uniquely + identifies the PNFD."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; + } + + leaf function-description { + type string; + description + "Describes the PNF function."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; + } + + leaf provider { + type string; + description + "Identifies the provider of the PNFD."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; + } + + leaf version { + type string; + mandatory true; + description + "Identifies the version of the PNFD."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; + } + + leaf invariant-id { + type string; + description + "Identifies a PNFD in a version independent manner. This + attribute is invariant across versions of PNFD."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; + } + + leaf name { + type string; + description + "Provides the human readable name of the PNFD."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; + } + + list ext-cpd { key "id"; + uses cpd; + description + "Specifies the characteristics of one or more connection + points where to connect the PNF to a VL."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; + } + + list security { + key "signature"; + uses security-parameters; + description + "Provides a signature to prevent tampering. + Editor's Note: While IFA014 does specify that the PNFD + includes a security parameter. SOL001 does not have one. + We need to harmonize SOL001 & SOL006 on this point."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; + } - leaf id { - type string; - description - "Identifier of this Pnfd information element. It uniquely - identifies the PNFD."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - leaf function-description { - type string; - description - "Describes the PNF function."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - leaf provider { - type string; - description - "Identifies the provider of the PNFD."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - leaf version { - type string; - mandatory true; - description - "Identifies the version of the PNFD."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - leaf invariant-id { - type string; - description - "Identifies a PNFD in a version independent manner. This - attribute is invariant across versions of PNFD."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - leaf name { - type string; - description - "Provides the human readable name of the PNFD."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - list ext-cpd { - key "id"; - uses cpd; - description - "Specifies the characteristics of one or more connection - points where to connect the PNF to a VL."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - list security { - key "signature"; - uses security-parameters; - description - "Provides a signature to prevent tampering. - Editor's Note: While IFA014 does specify that the PNFD - includes a security parameter. SOL001 does not have one. - We need to harmonize SOL001 & SOL006 on this point."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - leaf geographical-location-info { - type string; - description - "It provides information about the geographical location - (e.g. geographic coordinates or address of the building, - etc.) of the PNF. The cardinality 0 is used when the - location is unknown. - Editor's Note: The type is TBD in SOL001. We need to make - a common SOL001/SOL006 decision."; - reference - "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; - } - uses security-group-rule; + leaf geographical-location-info { + type string; + description + "It provides information about the geographical location + (e.g. geographic coordinates or address of the building, + etc.) of the PNF. The cardinality 0 is used when the + location is unknown. + Editor's Note: The type is TBD in SOL001. We need to make + a common SOL001/SOL006 decision."; + reference + "GS NFV-IFA014: Section 6.6.2, Pnfd information element"; } + uses security-group-rule; } } diff --git a/src/yang/etsi-nfv-pnfd.yang b/src/yang/etsi-nfv-pnfd.yang new file mode 100644 index 0000000000000000000000000000000000000000..a365e0189d31d9342ab067369ec328691cd22563 --- /dev/null +++ b/src/yang/etsi-nfv-pnfd.yang @@ -0,0 +1,26 @@ +module etsi-nfv-pnfd { + yang-version 1.1; + namespace "urn:etsi:nfv:yang:etsi-nfv-pnfd"; + prefix pnfd; + + import etsi-nfv-descriptors { + prefix vnf; + } + + organization + "European Telecommunications Standards Institute (ETSI)"; + + description + "Physcial Network Function Descriptor."; + + revision 2019-04-25 { + description + "Initial revision. + NSD according to ETSI GS NFV-IFA 014 Ed261v252."; + } + + container pnfd { + presence "PNFD container."; + uses vnf:pnfd; + } +} diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index 38ab691f29d74a2a0743ce52fde76ae1c6f22f4b..43c11095fa644be600e48c843e9c5fca838e2be8 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"; - mandatory true; - 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,306 +733,276 @@ 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"; - mandatory true; - 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; @@ -971,1548 +1019,1634 @@ submodule etsi-nfv-vnf { 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."; + + 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 int-virtual-link-desc { + 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."; - } + 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; - container l3-protocol-data { - when "(../associated-layer-protocol = 'IPv4') or " + - "(../associated-layer-protocol = 'IPv6')"; + 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 name { - type string; - description - "Network name associated with 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 ip-version { - type enumeration { - enum ipv4; - enum ipv6; - } - mandatory true; - description - "Specifies IP version of this L3 protocol. - Value: - • IPV4. - • IPV6."; - 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 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."; - } + 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-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."; - } + 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 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 id { + type leafref { + path "../../../vdu/id"; + } + reference + "GS NFV IFA011: Section 7.1.8.3, VduProfile information + element."; + } - 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."; - } + 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 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 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; - mandatory true; 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; - mandatory true; + 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; - mandatory true; - 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 @@ -2526,145 +2660,136 @@ submodule etsi-nfv-vnf { "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"; + } } } diff --git a/src/yang/etsi-nfv-vnfd.yang b/src/yang/etsi-nfv-vnfd.yang new file mode 100644 index 0000000000000000000000000000000000000000..5ded801b6d367dece55ad824c3fbef16c1c53f0a --- /dev/null +++ b/src/yang/etsi-nfv-vnfd.yang @@ -0,0 +1,26 @@ +module etsi-nfv-vnfd { + yang-version 1.1; + namespace "urn:etsi:nfv:yang:etsi-nfv-vnfd"; + prefix vnfd; + + import etsi-nfv-descriptors { + prefix vnf; + } + + organization + "European Telecommunications Standards Institute (ETSI)"; + + description + "Virtual Network Function Descriptor."; + + revision 2019-03-18 { + description + "Initial revision. + VNFD according to ETSI GS NFV-IFA 011 Ed261v254."; + } + + container vnfd { + presence "VNFD container."; + uses vnf:vnfd; + } +}