diff --git a/example-data/nfv.xml b/example-data/nfv.xml
index 42ddfedf1554cdf4edb324dc2b29098af49eaa5f..4b9470b49dacbbf7fe71e81864b7df6c2962e171 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 a75279e57de89e8678340557546d287ea88b8223..69d56a8b66fe9dc00d8607a9f2ed52d16a89ae78 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 a3ee11e5cdce4766f424f5f0ea6252b37e71c104..59cb63caeb1642bc096d1e761ecab4e9552bdd00 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";