description "NSD parameter pool name to use for this parameter";
type string;
}
- }
+ } // primitive-parameter
grouping nsd-descriptor-common {
leaf id {
different NS.";
key "name";
- leaf name {
- description
- "Name of the NS connection point.";
- type string;
- }
+ uses nsd-connection-point-common;
leaf type {
description
type manotypes:connection-point-type;
}
- leaf floating-ip-required {
- description
- "Boolean parameter to indicate whether the CP must be exposed.
- A public IP address will be allocated to this CP if exposed is true.
- The default is false meaning a floating IP address is not required.
- It must be explicitly asked for a floating IP address to be allocated.";
- type boolean;
- }
-
choice connection {
description "Logical connection of the CP to a VLD or to a VNF CP";
key "id";
- leaf id {
- description
- "Identifier for the VNFFGD.";
- type string;
- }
-
- leaf name {
- description
- "VNFFGD name.";
- type string;
- }
-
- leaf short-name {
- description
- "Short name to appear as label in the UI";
- type string;
- }
-
- leaf vendor {
- description "Provider of the VNFFGD.";
- type string;
- }
-
- leaf description {
- description "Description of the VNFFGD.";
- type string;
- }
-
- leaf version {
- description "Version of the VNFFGD";
- type string;
- }
+ uses fgd-common;
list rsp {
description
"List of Rendered Service Paths (RSP).";
-
key "id";
- leaf id {
- description
- "Identifier for the RSP.";
- type string;
+ uses rsp-common;
+
+ list vnfd-connection-point-ref { // not common
+ description
+ "A list of references to connection points.";
+ key "member-vnf-index-ref";
+
+ leaf member-vnf-index-ref {
+ description "Reference to member-vnf within constituent-vnfds";
+ type leafref {
+ path "../../../../constituent-vnfd/member-vnf-index";
+ }
}
- leaf name {
+ leaf order {
+ type uint8;
description
- "RSP name.";
- type string;
+ "A number that denotes the order of a VNF in a chain";
}
- list vnfd-connection-point-ref {
+ leaf vnfd-id-ref {
description
- "A list of references to connection points.";
- key "member-vnf-index-ref";
-
- leaf member-vnf-index-ref {
- description "Reference to member-vnf within constituent-vnfds";
- type leafref {
- path "../../../../constituent-vnfd/member-vnf-index";
- }
- }
-
- leaf order {
- type uint8;
- description
- "A number that denotes the order of a VNF in a chain";
- }
-
- leaf vnfd-id-ref {
- description
- "A reference to a vnfd. This is a
- leafref to path:
- ../../../../nsd:constituent-vnfd
- + [nsd:id = current()/../nsd:id-ref]
- + /nsd:vnfd-id-ref";
-
- type leafref {
- path "../../../../constituent-vnfd" +
- "[member-vnf-index = current()/../member-vnf-index-ref]" +
- "/vnfd-id-ref";
- }
+ "A reference to a vnfd. This is a
+ leafref to path:
+ ../../../../nsd:constituent-vnfd
+ + [nsd:id = current()/../nsd:id-ref]
+ + /nsd:vnfd-id-ref";
+
+ type leafref {
+ path "../../../../constituent-vnfd" +
+ "[member-vnf-index = current()/../member-vnf-index-ref]" +
+ "/vnfd-id-ref";
}
+ }
- leaf vnfd-connection-point-ref {
- description
- "A reference to a connection point name
- in a vnfd. This is a leafref to path:
- /vnfd:vnfd-catalog/vnfd:vnfd
- + [vnfd:id = current()/../nsd:vnfd-id-ref]
- + /vnfd:connection-point/vnfd:name
- NOTE: An issue with confd is preventing the
- use of xpath. Seems to be an issue with leafref
- to leafref, whose target is in a different module.
- Once that is resolved this will switched to use
- leafref";
- // TODO: Keeping as string as this needs to be
- // diffenent lvel based of if it is nsd-catalog or
- // in nsr.
- // type leafref {
- // path "../../../../../../vnfd:vnfd-catalog/vnfd:vnfd" +
- // "[vnfd:id = current()/../vnfd-id-ref]/" +
- // "vnfd:connection-point/vnfd:name";
- // }
- type string;
- }
+ leaf vnfd-connection-point-ref {
+ description
+ "A reference to a connection point name
+ in a vnfd. This is a leafref to path:
+ /vnfd:vnfd-catalog/vnfd:vnfd
+ + [vnfd:id = current()/../nsd:vnfd-id-ref]
+ + /vnfd:connection-point/vnfd:name
+ NOTE: An issue with confd is preventing the
+ use of xpath. Seems to be an issue with leafref
+ to leafref, whose target is in a different module.
+ Once that is resolved this will switched to use
+ leafref";
+ // TODO: Keeping as string as this needs to be
+ // diffenent lvel based of if it is nsd-catalog or
+ // in nsr.
+ // type leafref {
+ // path "../../../../../../vnfd:vnfd-catalog/vnfd:vnfd" +
+ // "[vnfd:id = current()/../vnfd-id-ref]/" +
+ // "vnfd:connection-point/vnfd:name";
+ // }
+ type string;
}
+ }
} //rsp
list classifier {
key "id";
- leaf id {
- description
- "Identifier for the classifier rule.";
- type string;
- }
-
- leaf name {
- description
- "Name of the classifier.";
- type string;
- }
-
- leaf rsp-id-ref {
- description
- "A reference to the RSP.";
- type leafref {
- path "../../rsp/id";
- }
- }
+ uses classifier-common;
leaf member-vnf-index-ref {
description "Reference to member-vnf within constituent-vnfds";
// }
type string;
}
-
- list match-attributes {
- description
- "List of match attributes.";
-
- key "id";
-
- leaf id {
- description
- "Identifier for the classifier match attribute rule.";
- type string;
- }
-
- leaf ip-proto {
- description
- "IP Protocol.";
- type uint8;
- }
-
- leaf source-ip-address {
- description
- "Source IP address.";
- type inet:ip-address;
- }
-
- leaf destination-ip-address {
- description
- "Destination IP address.";
- type inet:ip-address;
- }
-
- leaf source-port {
- description
- "Source port number.";
- type inet:port-number;
- }
-
- leaf destination-port {
- description
- "Destination port number.";
- type inet:port-number;
- }
- //TODO: Add more match criteria
- } //match-attributes
} // classifier
+
} // vnffgd
uses manotypes:ip-profile-list;
}
}
}
- }
+ } // nsd-descriptor-common
grouping nsd-vld-common {
/* Still having issues modelling this,
see the comments under vnfd-connection-point-ref
+
+ IMPORTANT: Change description fields
*/
+ uses vld-common;
+
+ choice init-params {
+ description "Extra parameters for VLD instantiation";
+
+ case vim-network-ref {
+ leaf vim-network-name {
+ description
+ "Name of network in VIM account. This is used to indicate
+ pre-provisioned network name in cloud account.";
+ type string;
+ }
+ }
+
+ case vim-network-profile {
+ leaf ip-profile-ref {
+ description "Named reference to IP-profile object";
+ type leafref {
+ path "../../ip-profiles/name";
+ }
+ }
+ }
+
+ }
+ } // nsd-vld-common
+
+ grouping nsd-connection-point-common {
+ description "NSD connection point base";
+ //IMPORTANT: Change description fields
+ leaf name {
+ description
+ "Name of the connection point.";
+ type string;
+ }
+
+ leaf floating-ip-required {
+ description
+ "Boolean parameter to indicate whether the CP must be exposed.
+ A public IP address will be allocated to this CP if exposed is true.
+ The default is false meaning a floating IP address is not required.
+ It must be explicitly asked for a floating IP address to be allocated.";
+ type boolean;
+ }
+ } // nsd-connection-point-common
+
+ grouping vld-common {
description
"List of Virtual Link Descriptors.";
type boolean;
default false;
}
+ } // vld-common
- choice init-params {
- description "Extra parameters for VLD instantiation";
+ grouping fgd-common {
- case vim-network-ref {
- leaf vim-network-name {
- description
- "Name of network in VIM account. This is used to indicate
- pre-provisioned network name in cloud account.";
- type string;
- }
+ leaf id {
+ description
+ "Identifier for the FGD.";
+ type string;
+ }
+
+ leaf name {
+ description
+ "FGD name.";
+ type string;
+ }
+
+ leaf short-name {
+ description
+ "Short name to appear as label in the UI";
+ type string;
+ }
+
+ leaf vendor {
+ description "Provider of the FGD.";
+ type string;
+ }
+
+ leaf description {
+ description "Description of the FGD.";
+ type string;
+ }
+
+ leaf version {
+ description "Version of the FGD";
+ type string;
+ }
+ } // fgd-common
+
+ grouping rsp-common {
+
+ leaf id {
+ description
+ "Identifier for the RSP.";
+ type string;
+ }
+
+ leaf name {
+ description
+ "RSP name.";
+ type string;
+ }
+
+ } // rsp-common
+
+ grouping classifier-common {
+
+ leaf id {
+ description
+ "Identifier for the classifier rule.";
+ type string;
+ }
+
+ leaf name {
+ description
+ "Name of the classifier.";
+ type string;
+ }
+
+ leaf rsp-id-ref {
+ description
+ "A reference to the RSP.";
+ type leafref {
+ path "../../rsp/id";
+ }
+ }
+
+ list match-attributes {
+ description
+ "List of match attributes.";
+
+ key "id";
+
+ leaf id {
+ description
+ "Identifier for the classifier match attribute rule.";
+ type string;
}
- case vim-network-profile {
- leaf ip-profile-ref {
- description "Named reference to IP-profile object";
- type leafref {
- path "../../ip-profiles/name";
- }
- }
+ leaf ip-proto {
+ description
+ "IP Protocol.";
+ type uint8;
}
- }
- }
+ leaf source-ip-address {
+ description
+ "Source IP address.";
+ type inet:ip-address;
+ }
+
+ leaf destination-ip-address {
+ description
+ "Destination IP address.";
+ type inet:ip-address;
+ }
+
+ leaf source-port {
+ description
+ "Source port number.";
+ type inet:port-number;
+ }
+
+ leaf destination-port {
+ description
+ "Destination port number.";
+ type inet:port-number;
+ }
+ //TODO: Add more match criteria
+ } //match-attributes
+ } // classifier-common
grouping monitoring-param-common {
description
uses manotypes:monitoring-param-value;
uses manotypes:monitoring-param-ui-data;
uses manotypes:monitoring-param-aggregation;
- }
+ } // monitoring-param-common
}
--- /dev/null
+//INFORMATION
+//organization "CTTC";
+//contact "Pol Alemany, Ricard Vilalta, Juan Luis de la Cruz";
+//description "Network Slice components definition";
+
+// MODULE STRUCTURE
+module nst {
+ //header information
+ yang-version 1;
+ namespace "urn:ietf:params:xml:ns:yang:nfvo:nst";
+ prefix "nst";
+
+ import nsd-base{
+ prefix "nsd-base";
+ }
+
+ import nsd {
+ prefix "nsd";
+ }
+
+ import instantiation-parameters {
+ prefix "instantiation-parameters";
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ //revision history
+ revision 2018-08-20 {
+ description "Initial version";
+ }
+
+ //typedef definitions
+ typedef connection-points {
+ description "";
+ type string;
+ }
+
+ typedef network-slice-type {
+ type enumeration {
+ enum eMBB {
+ description "enhanced Mobile Broadband slice";
+ }
+ enum URLLC {
+ description "Ultra Reliable Low Latency Communications slice";
+ }
+ enum mMTC {
+ description "massive Machine Type Communications slice";
+ }
+ }
+ }
+
+ typedef resource-type {
+ type enumeration {
+ enum delay-critical-GBR {
+ description "delay critical guaranted bit rate";
+ }
+ enum GBR {
+ description "guaranted bit rate";
+ }
+ enum non-GBR {
+ description "NON guaranted bit rate";
+ }
+ }
+ }
+
+ grouping nsvld {
+ description "List of NetSlice Subnet Virtual Link Descriptors.";
+
+ uses nsd-base:vld-common;
+
+ list nsd-connection-point-ref {
+ description
+ "A list of references to connection points.";
+ key "nsd-ref nsd-connection-point-ref";
+
+ leaf nsd-ref {
+ description "Reference to nsd";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+
+ leaf nsd-connection-point-ref {
+ description "A reference to a connection point name";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
+ }
+ }
+
+ leaf ip-address {
+ description "IP address of the connection point";
+ type inet:ip-address;
+ }
+
+ }
+ } // nsvld
+
+ grouping snssai {
+ description "";
+ leaf slice-service-type {
+ description "Network slice service type ";
+ type network-slice-type;
+ mandatory true;
+ }
+ leaf slice-differentiator {
+ description "Network slice differentiator";
+ type string;
+ }
+ } // snssai
+
+ grouping five-qi {
+ leaf id{
+ description "Quality of service identifier";
+ type uint16;
+ mandatory true;
+ }
+ leaf resource-type {
+ description "Quality of service resource type";
+ type resource-type;
+ }
+ leaf priority-level {
+ description "Priority level of the service";
+ type uint16;
+ }
+ leaf packet-delay-budget {
+ description "Packet delay budget in miliseconds (ms)";
+ type uint16;
+ }
+ leaf packet-error-rate {
+ description "Packet error rate (PER) given in powers of ten";
+ type uint16;
+ }
+ leaf default-max-data-burst {
+ description "Maximum data burst given in bytes (B)";
+ type uint16;
+ }
+ }
+
+ grouping netslice-subnet {
+ leaf id {
+ description "Identifier for the netslice-subnet.";
+ mandatory true;
+ type string {
+ length 1..63;
+ }
+ }
+ leaf name {
+ description "netslice-subnet name.";
+ mandatory true;
+ type string;
+ }
+ leaf short-name {
+ description "Short name to appear as label in the UI";
+ mandatory true;
+ type string;
+ }
+ leaf vendor {
+ description "Vendor of the NSD.";
+ mandatory true;
+ type string;
+ }
+ leaf is-shared-nss {
+ description "NSS is shared between NS";
+ mandatory true;
+ type boolean;
+ }
+ leaf description {
+ description "Description of the NSD.";
+ mandatory true;
+ type string;
+ }
+ leaf version {
+ description "Version of the NSD";
+ mandatory true;
+ type string;
+ }
+ leaf nsd-ref {
+ description "Reference to catalog NSD";
+ mandatory true;
+ type leafref{
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+ container instantiation-parameters {
+ uses instantiation-parameters:ns_instantiate;
+ }
+
+ }
+
+ grouping slice-connection-points {
+ description "List for external connection points. Each NS has one or more external connection
+ points. As the name implies that external connection points are used for connecting
+ the NS to other NS or to external networks. Each NS exposes these connection points
+ to the orchestrator. The orchestrator can construct network service chains by
+ connecting the connection points between different NS.";
+
+ uses nsd-base:nsd-connection-point-common;
+
+ choice connection {
+ description "Logical connection of the CP to a NSVLD or to a NSD CP";
+ case netslice-vld-ref {
+ leaf netslice-vld-id-ref {
+ description "ID reference to a NSVLD in the NS";
+ type leafref {
+ path "../../netslice-vld/id";
+ }
+
+ }
+ }
+ case nsd-connection-point-ref {
+ leaf nsd-id-ref {
+ description "A reference to a nsd.";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+ leaf nsd-connection-point-ref {
+ description "";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
+ }
+ }
+ }
+ }
+ }
+
+ grouping rsp {
+
+ uses nsd-base:rsp-common;
+
+ list nsd-connection-point-ref {
+ description
+ "A list of references to connection points.";
+ key "nsd-ref";
+
+ leaf nsd-ref {
+ description "Reference to member-vnf within constituent-vnfds";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+ leaf order {
+ type uint8;
+ description
+ "A number that denotes the order of a NSD in a chain";
+ }
+ leaf nsd-connection-point-ref {
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
+ }
+ }
+ }
+ }
+
+ grouping classifier {
+ uses nsd-base:classifier-common;
+
+ leaf nsd-ref {
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+
+ leaf nsd-connection-point-ref {
+
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
+ }
+ }
+ }
+
+ grouping netslicefgd {
+
+ uses nsd-base:fgd-common;
+
+ list rsp {
+ description
+ "List of Rendered Service Paths (RSP).";
+ key "id";
+ uses rsp;
+ }
+
+ list classifier {
+ description
+ "List of classifier rules.";
+ key "id";
+ uses classifier;
+ }
+ }
+ grouping network-slice{
+ leaf id {
+ mandatory true;
+ type string;
+ }
+
+ leaf name {
+ type string;
+ }
+
+ container SNSSAI-identifier {
+ uses snssai;
+ }
+ container quality-of-service {
+ uses five-qi;
+ }
+ list netslice-subnet {//list with multiple network service elements
+ key "id";
+ uses netslice-subnet;
+ }
+ list netslice-connection-point {
+ key "name";
+ uses slice-connection-points;
+ }
+ list netslice-vld {
+ key "id";
+ uses nsvld;
+ }
+ list netslicefgd{
+ key "id";
+ uses netslicefgd;
+ }
+ }
+
+ //containers definitions
+ list nst {
+ key "id";
+ uses network-slice;
+ }
+}