From d96b4247381eeef6c0b4ae5ccb01386eafb19150 Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Wed, 2 Jan 2019 15:41:44 -0800 Subject: [PATCH 1/7] 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/7] 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/7] 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/7] 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/7] 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 From 1e9c93d1021e8628365fb243594f9c026cbaed9c Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Wed, 9 Jan 2019 13:05:57 -0800 Subject: [PATCH 6/7] Fix for bug#94 --- src/yang/etsi-nfv-common.yang | 163 +++++++++++++++++--- src/yang/etsi-nfv-ns.yang | 2 +- src/yang/etsi-nfv-vnf.yang | 277 +++++++++++++++------------------- 3 files changed, 266 insertions(+), 176 deletions(-) diff --git a/src/yang/etsi-nfv-common.yang b/src/yang/etsi-nfv-common.yang index 6989f03..9fc55dc 100644 --- a/src/yang/etsi-nfv-common.yang +++ b/src/yang/etsi-nfv-common.yang @@ -376,30 +376,23 @@ submodule etsi-nfv-common { } } - // The following grouping is Cpd information element as defined in - // IFA014. IFA011 defines its own Cpd information element, which - // is defined in etsi-nfv-vnf.yang file. Do not use this grouping - // for inclusion in a Vnf. grouping cpd { description - "The Cpd information element specifies the characteristics of - connection points attached to NFs and NSs. This is an - abstract class used as parent for the various Cpd classes. - It has an attribute 'trunkMode' which enables the NFVO to - identify whether the Cp instantiated from the Cpd is in trunk - mode or not."; + "A Cpd information element describes network + connectivity to a compute resource or a VL."; reference - "GS NFC IFA014: Section 6.6.3.1 Cpd information element"; + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; leaf id { type string; description "Identifier of this Cpd information element."; reference - "GS NFC IFA014: Section 6.6.3.1 Cpd information element"; + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; } - leaf layer-protocol { - mandatory true; + + leaf-list layer-protocol { + default Ethernet; type identityref { base layer-protocol; } @@ -408,8 +401,9 @@ submodule etsi-nfv-common { corresponding to the CPD support for connectivity purposes (e.g. Ethernet, MPLS, ODU2, IPV4, IPV6, Pseudo-Wire, etc.)."; reference - "GS NFC IFA014: Section 6.6.3.1 Cpd information element"; + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; } + leaf role { type identityref { base cp-role; @@ -421,8 +415,9 @@ submodule etsi-nfv-common { a tree flow pattern within the NS will have legal cpRoles of ROOT and LEAF."; reference - "GS NFC IFA014: Section 6.6.3.1 Cpd information element"; + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; } + leaf description { type string; description @@ -430,8 +425,140 @@ submodule etsi-nfv-common { connection point (e.g. connection point for control plane traffic)."; reference - "GS NFC IFA014: Section 6.6.3.1 Cpd information element"; + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; + } + + list protocol { + key "associated-layer-protocol"; + + leaf associated-layer-protocol { + type identityref { + base layer-protocol; + } + description + "One of the values of the attribute layerProtocol of the Cpd + IE."; + reference + "GS NFV IFA011: Section 7.1.6.8 CpProtocolData information + element"; + } + + list address-data { + key "type"; + + leaf type { + type identityref { + base address-type; + } + description + "Describes the type of the address to be assigned to the + CP instantiated from the parent CPD. + Value: + • MAC address. + • IP address. + • Etc. + The content type shall be aligned with the address type + supported by the layerProtocol attribute of the parent + CPD."; + reference + "GS NFV IFA011: Section 7.1.3.3 AddressData information + element"; + } + + container l2-address-data { + when "../type='mac-address'"; + leaf mac-address-assignment { + type boolean; + default true; + description + "Specify if the MAC address assignment is the + responsibility of management and orchestration function + or not. If it is set to True, it is the management and + orchestration function responsibility. If it is set to + False, it will be provided by an external entity, + e.g. OSS/BSS."; + reference + "GS NFV IFA011: Section 7.1.3.5 L2AddressData + information element"; + } + + description + "Provides the information on the MAC addresses to be + assigned to the CP(s) instantiated from the parent CPD. + Shall be present when the addressType is MAC address."; + reference + "GS NFV IFA011: Section 7.1.3.3 AddressData information + element"; + } + + container l3-address-data { + when "../type='ip-address'"; + leaf ip-address-assignment { + type boolean; + default "true"; + description + "Specify if the address assignment is the responsibility + of management and orchestration function or not. If it + is set to True, it is the management and orchestration + function responsibility. "; + reference + "GS NFV IFA011: Section 7.1.3.4, L3AddressData + information element."; + } + + leaf floating-ip-activated { + type boolean; + default "true"; + description + "Specify if the floating IP scheme is activated on the CP + or not."; + reference + "GS NFV IFA011: Section 7.1.3.4, L3AddressData + information element."; + } + + leaf ip-address-type { + type enumeration { + enum "ipv4"; + enum "ipv6"; + } + description + "Define address type. The address type should be aligned + with the address type supported by the layerProtocol + attribute of the parent VnfExtCpd."; + reference + "GS NFV IFA011: Section 7.1.3.4, L3AddressData + information element."; + } + + leaf number-of-ip-addresses { + type uint32; + description + "Minimum number of IP addresses to be assigned based on + this L3AddressData information element."; + reference + "GS NFV IFA011: Section 7.1.3.4, L3AddressData + information element."; + } + } + description + "Provides information on the addresses to be assigned to the + CP(s) instantiated from the CPD."; + reference + "GS NFV IFA011: Section 7.1.6.8 CpProtocolData information + element"; + } + description + "Identifies the protocol layering information the CP uses for + connectivity purposes and associated information. There shall + be one cpProtocol for each layer protocol as indicated by the + attribute layerProtocol. When a PnfExtCpd as defined in ETSI + GS NFV-IFA 014 [i.8] is inherited from this Cpd, the + cardinality is set to 0."; + reference + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; } + leaf trunk-mode { type boolean; description @@ -442,7 +569,7 @@ submodule etsi-nfv-common { is not configured for the Cp i.e. It is equivalent to Boolean value 'false'."; reference - "GS NFC IFA014: Section 6.6.3.1 Cpd information element"; + "GS NFV IFA011: Section 7.1.6.3 Cpd information element"; } } } diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index 5397066..82d649e 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -130,7 +130,7 @@ submodule etsi-nfv-ns { description "Identifier of this Cpd information element."; reference - "GS NFC IFA014: Section 6.6.3.1 Cpd information element"; + "GS NFV IFA014: Section 6.6.3.1 Cpd information element"; } leaf address-assignment { diff --git a/src/yang/etsi-nfv-vnf.yang b/src/yang/etsi-nfv-vnf.yang index 3be1321..ab3319e 100755 --- a/src/yang/etsi-nfv-vnf.yang +++ b/src/yang/etsi-nfv-vnf.yang @@ -98,161 +98,6 @@ submodule etsi-nfv-vnf { } } - // This grouping definition is for use within Vnfd as defined in - // IFA011. A similar definition of Cpd exists in IFA014, but - // that is for use with Sapd and Pnfd. Do not use this grouping - // for that. - grouping vnf-cpd { - description - "A Cpd information element describes network - connectivity to a compute resource or a VL."; - reference - "GS NFC IFA011: Section 7.1.6.3 Cpd Information - Element"; - leaf id { - type string; - description - "Identifier of this Cpd information element."; - reference - "GS NFV IFA011: Section 7.1.6.3, Cpd information element."; - } - leaf layer-protocol { - default Ethernet; - type identityref { - base layer-protocol; - } - description - "Identifies which protocol the CP uses for connectivity - purposes (Ethernet, MPLS, ODU2, IPV4, IPV6, Pseudo-Wire, - etc.)."; - reference - "GS NFV IFA011: Section 7.1.6.3, Cpd information element."; - } - leaf role { - type identityref { - base cp-role; - } - description - "Identifies the role of the port in the context of the - traffic flow patterns in the VNF or parent NS. For example a - VNF with a tree flow pattern within the VNF will have legal - cpRoles of ROOT and LEAF."; - reference - "GS NFV IFA011: Section 7.1.6.3, Cpd information element."; - } - leaf description { - type string; - description - "Human readable description of the connection point"; - reference - "GS NFV IFA011: Section 7.1.6.3, Cpd information element."; - } - container protocol { - description - "Identifies the protocol layering information the CP uses for - connectivity purposes and associated information. There shall - be one cpProtocol for each layer protocol as indicated by the - attribute layerProtocol."; - reference - "GS NFV IFA011: Section 7.1.6.3, Cpd information element."; - leaf associated-layer-protocol { - type identityref { - base layer-protocol; - } - description - "One of the values of the attribute layerProtocol of the Cpd - IE."; - reference - "GS NFV IFA011: Section 7.1.6.8, CpProtocolData information - element."; - } - - list address-data { - key "address-type"; - leaf address-type { - type identityref { - base address-type; - } - description - "Describes the type of the address to be assigned to the CP - instantiated from the parent CPD. - Value: - • MAC address. - • IP address. - • … - The content type shall be aligned with the address type - supported by the layerProtocol attribute of the parent CPD."; - reference - "GS NFV IFA011: Section 7.1.3.3, AddressData information - element."; - } - container l2-address-data { - when "../address-type='mac-address'"; - } - container l3-address-data { - when "../address-type='ip-address'"; - leaf ip-address-assignment { - type boolean; - description - "Specify if the address assignment is the responsibility - of management and orchestration function or not. If it - is set to True, it is the management and orchestration - function responsibility. "; - reference - "GS NFV IFA011: Section 7.1.3.4, L3AddressData - information element."; - } - leaf floating-ip-activated { - type boolean; - description - "Specify if the floating IP scheme is activated on the CP - or not."; - reference - "GS NFV IFA011: Section 7.1.3.4, L3AddressData - information element."; - } - leaf ip-address-type { - type enumeration { - enum "ipv4"; - enum "ipv6"; - } - description - "Define address type. The address type should be aligned - with the address type supported by the layerProtocol - attribute of the parent VnfExtCpd."; - reference - "GS NFV IFA011: Section 7.1.3.4, L3AddressData - information element."; - } - leaf number-of-ip-addresses { - type uint32; - description - "Minimum number of IP addresses to be assigned based on - this L3AddressData information element."; - reference - "GS NFV IFA011: Section 7.1.3.4, L3AddressData - information element."; - } - } - description - "The AddressData information element supports providing - information about the addressing scheme and parameters - applicable to a CP."; - reference - "GS NFV IFA011: Section 7.1.3.3, AddressData information - element."; - } - } - leaf trunk-mode { - type boolean; - description - "Information about whether the CP instantiated from this CPD - is in Trunk mode (802.1Q or other)."; - reference - "GS NFV IFA011: Section 7.1.6.3, Cpd information element."; - } - } - grouping vnfd { list vnfd { key "id"; @@ -436,7 +281,17 @@ submodule etsi-nfv-vnf { element."; } - uses vnf-cpd; + 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 virtual-compute-desc { type leafref { @@ -1265,6 +1120,103 @@ submodule etsi-nfv-vnf { } } + list security-group-rule { + key "id"; + + leaf id { + type string; + description + "Identifier of this SecurityGroupRule information + element."; + reference + "GS NFV IFA011: Section 7.1.6.9, SecurityGroupRule + information element."; + } + + leaf description { + type string; + description + "Human readable description of the security group rule."; + reference + "GS NFV IFA011: Section 7.1.6.9, SecurityGroupRule + information element."; + } + + leaf direction { + type enumeration { + enum ingress; + enum egress; + } + default "ingress"; + description + "The direction in which the security group rule is applied. + Permitted values: INGRESS, EGRESS. Defaults to INGRESS."; + reference + "GS NFV IFA011: Section 7.1.6.9, SecurityGroupRule + information element."; + } + + leaf ether-type { + type enumeration { + enum ipv4; + enum ipv6; + } + default "ipv4"; + description + "Indicates the protocol carried over the Ethernet layer. + Permitted values: IPV4, IPV6. Defaults to IPV4."; + reference + "GS NFV IFA011: Section 7.1.6.9, SecurityGroupRule + information element."; + } + + leaf protocol { + type enumeration { + enum tcp; + enum udp; + enum icmp; + } + default "tcp"; + description + "Indicates the protocol carried over the IP layer. + Permitted values: any protocol defined in the IANA + protocol registry, e.g. TCP, UDP, ICMP, etc. Defaults + to TCP."; + reference + "GS NFV IFA011: Section 7.1.6.9, SecurityGroupRule + information element."; + } + + leaf port-range-min { + must ". <= ../port-range-max"; + type uint16; + default "0"; + description + "Indicates minimum port number in the range that is + matched by the security group rule. Defaults to 0."; + reference + "GS NFV IFA011: Section 7.1.6.9, SecurityGroupRule + information element."; + } + + leaf port-range-max { + must ". >= ../port-range-min"; + type uint16; + default "65535"; + description + "Indicates maximum port number in the range that is + matched by the security group rule. Defaults to 65535."; + reference + "GS NFV IFA011: Section 7.1.6.9, SecurityGroupRule + information element."; + } + + description + "Defines security group rules to be used by the VNF."; + reference + "GS NFV IFA011: Section 7.1.2, VNFD information element."; + } + list ext-cpd { key "id"; min-elements 1; @@ -1300,7 +1252,18 @@ submodule etsi-nfv-vnf { } } uses virtual-network-interface-requirements; - uses vnf-cpd; + 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"; + } } list df { -- GitLab From 6ee6373ff6ccbba8314badaf886313292e34b554 Mon Sep 17 00:00:00 2001 From: Mahesh Jethanandani Date: Fri, 11 Jan 2019 12:46:17 -0800 Subject: [PATCH 7/7] Fix for bug#95 --- example-data/nfv.xml | 60 ++++++++++++---- src/yang/etsi-nfv-ns.yang | 145 +++++++++++++++++++++++++++----------- 2 files changed, 152 insertions(+), 53 deletions(-) diff --git a/example-data/nfv.xml b/example-data/nfv.xml index 24ed998..15ef3fe 100644 --- a/example-data/nfv.xml +++ b/example-data/nfv.xml @@ -298,11 +298,17 @@ 1 mgmt - management + + firewall + management + r2fw - outside + + firewall + outside + @@ -314,11 +320,17 @@ 1 mgmt - management + + router + management + r2fw - right + + router + right + @@ -367,15 +379,24 @@ 1 fw2dpi - inside + + firewall + inside + mgmt - management + + firewall + management + r2fw - outside + + firewall + outside + @@ -387,11 +408,17 @@ 1 mgmt - management + + router + management + r2fw - right + + router + right + @@ -399,7 +426,10 @@ physical-dpi fw2dpi - outside + + physical-dpi + outside + @@ -494,7 +524,10 @@ 1 r2fw - right + + router + right + @@ -528,7 +561,10 @@ 1 r2fw - outside + + firewall + outside + diff --git a/src/yang/etsi-nfv-ns.yang b/src/yang/etsi-nfv-ns.yang index 82d649e..b75eff2 100644 --- a/src/yang/etsi-nfv-ns.yang +++ b/src/yang/etsi-nfv-ns.yang @@ -805,18 +805,41 @@ submodule etsi-nfv-ns { information element."; } - leaf-list cpd-id { - type leafref { - path "deref(../../vnfd-id)/../ext-cpd/id"; - } + list constituent-cpd-id { + key "constituent-base-element-id"; + description - "References the descriptor of a connection point on a - VNF/PNF or a SAP which connects to virtual links - instantiated from the profile identified in the - virtualLinkProfileId attribute."; + "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.2, NsVirutalLinkConnectivity - information element."; + "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(../../../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"; + } } } } @@ -872,18 +895,41 @@ submodule etsi-nfv-ns { information element."; } - leaf-list cpd-id { - type leafref { - path "deref(../../pnfd-id)/../ext-cpd/id"; - } + list constituent-cpd-id { + key "constituent-base-element-id"; + description - "References the descriptor of a connection point on a - VNF/PNF or a SAP which connects to virtual links - instantiated from the profile identified in the - virtualLinkProfileId attribute."; + "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.2, NsVirutalLinkConnectivity - information element."; + "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"; + } } } } @@ -1338,28 +1384,45 @@ submodule etsi-nfv-ns { "GS NFV IFA014: Section 6.3.7.2, NsVirutalLinkConnectivity information element."; } - leaf-list cpd-id { - type leafref { - path "deref(../../nsd-id)/../sapd/id"; - } - description - "References the descriptor of a connection point on a - VNF/PNF or a SAP which connects to virtual links - instantiated from the profile identified in the - virtualLinkProfileId attribute."; + + 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.2, NsVirutalLinkConnectivity - information element."; - } - description - "Defines the connection information of the NS, it - contains connection relationship between an NS SAP and - a NS virtual Link of the composite NS."; - reference - "GS NFV IFA014: Section 6.3.11.2 NsProfile information - element"; - } - } + "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(../../../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"; + } + } + } + } list dependencies { key "id"; -- GitLab