From d96b4247381eeef6c0b4ae5ccb01386eafb19150 Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Wed, 2 Jan 2019 15:41:44 -0800 Subject: [PATCH 1/5] Addressing bug#91 --- example-data/nfv.xml | 30 ++++++-- src/yang/etsi-nfv-ns.yang | 39 +++++----- src/yang/etsi-nfv-vnf.yang | 144 +++++++++++++++++++++++++++++++++---- 3 files changed, 171 insertions(+), 42 deletions(-) diff --git a/example-data/nfv.xml b/example-data/nfv.xml index 42ddfed..4b9470b 100644 --- a/example-data/nfv.xml +++ b/example-data/nfv.xml @@ -11,17 +11,14 @@ Firewall VDU inside - inside Ethernet management - management Ethernet outside - outside Ethernet asa-vcd @@ -51,14 +48,26 @@ inside + + firewall + inside + Ethernet management + + firewall + management + Ethernet outside + + firewall + outside + Ethernet @@ -97,17 +106,14 @@ Router VDU left - left Ethernet management - management Ethernet right - right Ethernet csr-vcd @@ -137,14 +143,26 @@ left + + router + left + Ethernet management + + router + management + Ethernet right + + router + right + Ethernet diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index a75279e..69d56a8 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -4,10 +4,7 @@ submodule etsi-nfv-ns { prefix nfv; } - import etsi-nfv-common { - prefix common; - } - + include etsi-nfv-common; include etsi-nfv-vnf; include etsi-nfv-pnf; @@ -248,7 +245,7 @@ submodule etsi-nfv-ns { information element"; } - uses common:connectivity-type; + uses connectivity-type; list df { key "id"; @@ -364,7 +361,7 @@ submodule etsi-nfv-ns { "GS NFV IFA014: Section 6.5.2.2 NsVirtualLinkDesc information element"; } - uses common:security-parameters; + uses security-parameters; } list vnffgd { @@ -485,7 +482,7 @@ submodule etsi-nfv-ns { } container ns { leaf nsd-id { - must ". = deref(../../ns-profile-id)/../nsd-id" { + must ". = deref(../../nested-ns-profile-id)/../nsd-id" { } type leafref { @@ -745,7 +742,7 @@ submodule etsi-nfv-ns { } leaf min-number-of-instances { - mandatory true; + default 1; type uint16; description "Minimum number of instances of the VNF based on this @@ -756,7 +753,7 @@ submodule etsi-nfv-ns { } leaf max-number-of-instances { - mandatory true; + default 1; type uint16; description "Maximum number of instances of the VNF based on this @@ -766,7 +763,7 @@ submodule etsi-nfv-ns { element"; } - uses common:local-affinity-or-anti-affinity-rule; + uses local-affinity-or-anti-affinity-rule; list affinity-or-anti-affinity-group { key "id"; @@ -932,7 +929,7 @@ submodule etsi-nfv-ns { information element"; } - uses common:local-affinity-or-anti-affinity-rule; + uses local-affinity-or-anti-affinity-rule; list affinity-or-anti-affinity-group { key "id"; @@ -959,7 +956,7 @@ submodule etsi-nfv-ns { reference "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile information element"; - uses common:link-bitrate-requirements; + uses link-bitrate-requirements; } container min-bitrate-requirements { description @@ -968,7 +965,7 @@ submodule etsi-nfv-ns { reference "GS NFV IFA014: Section 6.3.4.2 VirtualLinkProfile information element"; - uses common:link-bitrate-requirements; + uses link-bitrate-requirements; } } @@ -1048,7 +1045,7 @@ submodule etsi-nfv-ns { leaf affinity-type { mandatory true; - type common:affinity-type; + type affinity-type; description "Specifies the type of relationship that the members of the group have: 'affinity' or 'anti-affinity.'"; @@ -1059,7 +1056,7 @@ submodule etsi-nfv-ns { leaf affinity-scope { mandatory true; - type common:affinity-scope; + type affinity-scope; description "Specifies the scope of the affinity or anti-affinity relationship e.g. a NFVI node, an NFVI PoP, etc."; @@ -1123,7 +1120,7 @@ submodule etsi-nfv-ns { } leaf number-of-instances { - mandatory true; + default 1; type uint32; description "Specifies the number of VNF instances required for @@ -1156,7 +1153,7 @@ submodule etsi-nfv-ns { VirtualLinkToLevelMapping information element"; } - uses common:link-bitrate-requirements; + uses link-bitrate-requirements; } list ns-to-level-mapping { @@ -1183,7 +1180,7 @@ submodule etsi-nfv-ns { } leaf number-of-instances { - mandatory true; + default 1; type uint32; description "Specifies the number of nested NS instances required @@ -1289,7 +1286,7 @@ submodule etsi-nfv-ns { } leaf min-number-of-instances { type uint16; - mandatory true; + default 1; description "Minimum number of nested NS instances based on the referenced NSD that is permitted to exist for this @@ -1300,7 +1297,7 @@ submodule etsi-nfv-ns { } leaf max-number-of-instances { type uint16; - mandatory true; + default 1; description "Maximum number of nested NS instances based on the referenced NSD that is permitted to exist for this @@ -1484,7 +1481,7 @@ submodule etsi-nfv-ns { } } } - uses common:security-parameters; + uses security-parameters; } } } diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index a3ee11e..59cb63c 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -54,7 +54,7 @@ submodule etsi-nfv-vnf { VirtualNetworkInterfaceRequirements information element"; } leaf support-mandatory { - mandatory true; + default "false"; type boolean; description "Indicates whether fulfilling the constraint is @@ -117,7 +117,7 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.3, Cpd information element."; } leaf layer-protocol { - mandatory true; + default Ethernet; type identityref { base layer-protocol; } @@ -700,8 +700,8 @@ submodule etsi-nfv-vnf { fraction-digits 1; range "0..max"; } - units "Gb"; - mandatory true; + units "MBytes"; + default 1; description "Amount of virtual memory in MB."; reference @@ -773,7 +773,7 @@ submodule etsi-nfv-vnf { type uint16 { range "1..max"; } - mandatory true; + default 1; description "Number of virtual CPUs."; reference @@ -820,7 +820,7 @@ submodule etsi-nfv-vnf { container virtual-cpu-pinning { presence "Set to specify CPU pinning."; leaf cpu-pinning-policy { - mandatory true; + default "dynamic"; type enumeration { enum "static"; enum "dynamic"; @@ -866,7 +866,7 @@ submodule etsi-nfv-vnf { enum "swap"; enum "ephemeral"; } - mandatory true; + default "root"; description "Type of virtualised storage resource (e.g. volume, object)."; @@ -877,7 +877,7 @@ submodule etsi-nfv-vnf { leaf size-of-storage { type uint64; units "Gb"; - mandatory true; + default 1; description "Size of virtualised storage resource (e.g. size of volume, in Gb)"; @@ -964,7 +964,7 @@ submodule etsi-nfv-vnf { information element."; } leaf container-format { - mandatory true; + default "bare"; type enumeration { enum "aki" { description @@ -1004,7 +1004,7 @@ submodule etsi-nfv-vnf { information element."; } leaf disk-format { - mandatory true; + default "qcow2"; type enumeration { enum "aki" { description @@ -1102,7 +1102,7 @@ submodule etsi-nfv-vnf { information element."; } leaf image { - mandatory true; + default "."; type inet:uri; description "This is a reference to the actual software image. @@ -1274,7 +1274,9 @@ submodule etsi-nfv-vnf { } } leaf cpd { - path "deref(../vdu-id)/../int-cpd/id"; + type leafref { + path "deref(../vdu-id)/../int-cpd/id"; + } } } } @@ -1327,7 +1329,7 @@ submodule etsi-nfv-vnf { } leaf min-number-of-instances { type uint16; - mandatory true; + default 1; description "Minimum number of instances of the VNFC based on this VDU that is permitted to exist for this flavour."; @@ -1337,7 +1339,7 @@ submodule etsi-nfv-vnf { } leaf max-number-of-instances { type uint16; - mandatory true; + default 1; must ". >= ../nfv:min-number-of-instances"; reference "GS NFV IFA011: Section 7.1.8.3, VduProfile information @@ -1498,7 +1500,7 @@ submodule etsi-nfv-vnf { must ". >= ../../../../nfv:df/" + "nfv:vdu-profile[id=current()/../nfv:id]/" + "nfv:min-number-of-instances"; - mandatory true; + default 1; description "Number of instances of VNFC based on this VDU to deploy for this level."; @@ -1795,6 +1797,118 @@ submodule etsi-nfv-vnf { AffinityOrAntiAffinityGroup information element"; } } + + list indicator { + key "id"; + + leaf id { + type string; + description + "Unique identifier."; + reference + "GS NFV IFA011: Section 7.1.11.2 VnfIndicator + information element"; + } + + 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 + "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 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"; + } + + 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"; + } + 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; + } + + leaf value { + type string; + } + } + + 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"; -- GitLab From 564db7c2fb20efcca0dad403e2c5689411f6b77b Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Wed, 2 Jan 2019 16:45:25 -0800 Subject: [PATCH 2/5] Fix for bug#92 --- src/yang/etsi-nfv-vnf.yang | 57 +++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index 59cb63c..e00abd7 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -955,8 +955,26 @@ submodule etsi-nfv-vnf { "GS NFV IFA011: Section 7.1.6.5 SwImageDesc information element."; } - leaf checksum { - type string; + container checksum { + leaf algorithm { + type string; + description + "Species the algorithm used to obtain the checksum + value."; + reference + "GS NFV IFA011: Section 7.1.6.10 ChecksumData + information element."; + } + leaf hash { + 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 @@ -2177,7 +2195,23 @@ submodule etsi-nfv-vnf { leaf-list extension { type string; description - "'Extension' attributes of VnfInfo that are writeable."; + "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.14 VnfInfoModifiableAttributes information element"; @@ -2185,7 +2219,22 @@ submodule etsi-nfv-vnf { leaf-list metadata { type string; description - "'Metadata' attributes of VnfInfo that are writeable."; + "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"; -- GitLab From a600b3eeb9cae0a26968051488dc8c348ff0472a Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Wed, 2 Jan 2019 17:13:25 -0800 Subject: [PATCH 3/5] Fix for bug#93 --- example-data/nfv.xml | 16 ++++++++++++---- src/yang/etsi-nfv-common.yang | 20 +++++++++++++------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/example-data/nfv.xml b/example-data/nfv.xml index 4b9470b..24ed998 100644 --- a/example-data/nfv.xml +++ b/example-data/nfv.xml @@ -243,7 +243,9 @@ fw2dpi 1.0 - Ethernet + + Ethernet + normal @@ -257,7 +259,9 @@ mgmt 1.0 - IPv4 + + IPv4 + normal @@ -271,7 +275,9 @@ r2fw 1.0 - Ethernet + + Ethernet + normal @@ -465,7 +471,9 @@ r2fw 1.0 - IPv4 + + IPv4 + r2fw diff --git a/src/yang/etsi-nfv-common.yang b/src/yang/etsi-nfv-common.yang index 07b26dd..992dd5a 100644 --- a/src/yang/etsi-nfv-common.yang +++ b/src/yang/etsi-nfv-common.yang @@ -253,14 +253,20 @@ submodule etsi-nfv-common { grouping connectivity-type { container connectivity-type { - leaf layer-protocol { - mandatory true; - type identityref { - base layer-protocol; - } + list layer-protocol { + key "protocol"; + + leaf protocol { + type identityref { + base layer-protocol; + } + } description - "Identifies the protocol this VL gives access to (Ethernet, - MPLS, ODU2, IPV4, IPV6, Pseudo-Wire)."; + "Identifies the protocols that the VL uses (Ethernet, + MPLS, ODU2, IPV4, IPV6, Pseudo-Wire). The top layer + protocol of the VL protocol stack shall always be provided. + The lower layer protocols may be included when there are + specific requirements on these layers."; reference "GS NFV IFA011: Section 7.1.7.3, ConnectivityType information element."; -- GitLab From 79ebe6319ae9a3edddf8930b8e431a99247b8cb0 Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Thu, 3 Jan 2019 16:12:29 -0800 Subject: [PATCH 4/5] Updated reference and revision date --- src/yang/etsi-nfv-common.yang | 6 +++--- src/yang/etsi-nfv-ns.yang | 6 +++--- src/yang/etsi-nfv-pnf.yang | 6 +++--- src/yang/etsi-nfv-vnf.yang | 6 +++--- src/yang/etsi-nfv.yang | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/yang/etsi-nfv-common.yang b/src/yang/etsi-nfv-common.yang index 992dd5a..6989f03 100644 --- a/src/yang/etsi-nfv-common.yang +++ b/src/yang/etsi-nfv-common.yang @@ -6,13 +6,13 @@ submodule etsi-nfv-common { description "Common data types for ETSI data models."; - revision 2018-06-19 { + revision 2019-03-18 { description "Initial revision Common data structures to support VNFD and NSD according to: - ETSI GS NFV-IFA 014 Ed251v244 - ETSI GS NFV-IFA 011 Ed251v243"; + ETSI GS NFV-IFA 014 Ed261v252 + ETSI GS NFV-IFA 011 Ed261v254"; } /* diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index 69d56a8..8b0de49 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -11,14 +11,14 @@ submodule etsi-nfv-ns { description "Models for NS according to ETSI GS NFV-IFA 014."; - revision 2017-01-20 { + revision 2019-03-18 { description "Initial revision Common data structure to support NSD according to: - ETSI GS NFV-IFA 011 Ed251v243"; + ETSI GS NFV-IFA 014 Ed261v252"; reference - "ETSI GS NFV-IFA 011 Ed251v243"; + "ETSI GS NFV-IFA 014 Ed261v252"; } grouping resource-handle { diff --git a/src/yang/etsi-nfv-pnf.yang b/src/yang/etsi-nfv-pnf.yang index 1bfad35..c7a8ff0 100644 --- a/src/yang/etsi-nfv-pnf.yang +++ b/src/yang/etsi-nfv-pnf.yang @@ -12,15 +12,15 @@ submodule etsi-nfv-pnf { description "Models for PNFD according to GS NFV-IFA 014."; - revision 2018-06-25 { + revision 2019-03-18 { description "Initial revision. Common data structure to support VNFD according to: - ETSI GS NFV-IFA 014 Ed251v244"; + ETSI GS NFV-IFA 014 Ed261v252"; reference - "ETSI GS NFV-IFA 014 Ed251v244"; + "ETSI GS NFV-IFA 014 Ed261v252"; } grouping pnfd { diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index e00abd7..7b16bba 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -16,15 +16,15 @@ submodule etsi-nfv-vnf { description "Models for VNFD according to GS NFV-IFA 011."; - revision 2018-06-19 { + revision 2019-03-18 { description "Initial revision. Common data structure to support VNFD according to: - VNFD according to ETSI GS NFV-IFA 011 Ed251v243"; + VNFD according to ETSI GS NFV-IFA 011 Ed261v254"; reference - "ETSI GS NFV-IFA 011 Ed251v243"; + "ETSI GS NFV-IFA 011 Ed261v254"; } grouping virtual-network-interface-requirements { diff --git a/src/yang/etsi-nfv.yang b/src/yang/etsi-nfv.yang index a209fc3..96d0db1 100644 --- a/src/yang/etsi-nfv.yang +++ b/src/yang/etsi-nfv.yang @@ -14,11 +14,11 @@ module etsi-nfv { description "Network Function Virtualization Descriptors"; - revision 2018-06-13 { + revision 2019-03-18 { description "Initial revision. - NSD and PNFD according to ETSI GS NFV-IFA 014 Ed251v244 - VNFD according to ETSI GS NFV-IFA 011 Ed251v243"; + NSD and PNFD according to ETSI GS NFV-IFA 014 Ed261v252 + VNFD according to ETSI GS NFV-IFA 011 Ed261v254"; } container nfv { -- GitLab From 65c3c02b07a75f959c43ccdfa8aad4fd87ee8fb7 Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Fri, 4 Jan 2019 15:29:12 -0800 Subject: [PATCH 5/5] Fix for bug#89 --- src/yang/etsi-nfv-ns.yang | 1 + src/yang/etsi-nfv-vnf.yang | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index 8b0de49..5397066 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -269,6 +269,7 @@ submodule etsi-nfv-ns { } container qos { + presence "VL QoS parameters"; description "The QoS information element specifies quality of service parameters applicable to a VL."; diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index 7b16bba..3be1321 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -700,7 +700,7 @@ submodule etsi-nfv-vnf { fraction-digits 1; range "0..max"; } - units "MBytes"; + units "Gb"; default 1; description "Amount of virtual memory in MB."; @@ -877,7 +877,7 @@ submodule etsi-nfv-vnf { leaf size-of-storage { type uint64; units "Gb"; - default 1; + default 0; description "Size of virtualised storage resource (e.g. size of volume, in Gb)"; @@ -1187,6 +1187,7 @@ submodule etsi-nfv-vnf { information element."; } container qos { + presence "VL QoS parameters"; description "QoS of the VL."; reference -- GitLab