From 27797538e3a008bfe4c3085ced33daeb6ef88433 Mon Sep 17 00:00:00 2001 From: jdelacruz Date: Tue, 18 Sep 2018 19:16:16 +0200 Subject: [PATCH] Adding nst.yang and nsi.yang to data model. Some modifications to nsd-base and instantiation-parameters. Added new models to Makefile. Change-Id: I73f77b79876265a07a940e42911d5189e02b2266 Signed-off-by: jdelacruz --- Makefile | 2 +- models/yang/instantiation-parameters.yang | 12 +- models/yang/nsd-base.yang | 408 ++++++++++++---------- models/yang/nsi.yang | 93 +++++ models/yang/nst.yang | 331 ++++++++++++++++++ 5 files changed, 647 insertions(+), 199 deletions(-) create mode 100644 models/yang/nsi.yang create mode 100644 models/yang/nst.yang diff --git a/Makefile b/Makefile index 9f0d92b..990b4eb 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ PYANG:= pyang PYBINDPLUGIN:=$(shell /usr/bin/env python3 -c \ 'import pyangbind; import os; print("{}/plugin".format(os.path.dirname(pyangbind.__file__)))') -YANG_DESC_MODELS := vnfd nsd +YANG_DESC_MODELS := vnfd nsd nst nsi YANG_RECORD_MODELS := vnfr nsr PYTHON_MODELS := $(addsuffix .py, $(YANG_DESC_MODELS)) YANG_DESC_TREES := $(addsuffix .tree.txt, $(YANG_DESC_MODELS)) diff --git a/models/yang/instantiation-parameters.yang b/models/yang/instantiation-parameters.yang index a954066..810b959 100644 --- a/models/yang/instantiation-parameters.yang +++ b/models/yang/instantiation-parameters.yang @@ -38,7 +38,7 @@ module instantiation-parameters { revision 2018-09-14 { description "Initial version"; } - //typedef definitions + grouping ns_instantiate { leaf nsName { mandatory true; @@ -75,6 +75,7 @@ module instantiation-parameters { uses vld; } } + grouping vnf { leaf member-vnf-index{ mandatory true; @@ -107,7 +108,8 @@ module instantiation-parameters { key "member-vnf-index-ref vnfd-connection-point-ref"; leaf member-vnf-index-ref { type leafref { - path "../../../vnf/member-vnf-index"; + //path "../../../vnf/member-vnf-index"; + path "/nsd:nsd-catalog/nsd:nsd/nsd:constituent-vnfd/nsd:member-vnf-index"; } } leaf vnfd-connection-point-ref { @@ -119,7 +121,6 @@ module instantiation-parameters { type inet:ip-address; } } - } grouping ns_instantiate_vdu { @@ -208,10 +209,5 @@ module instantiation-parameters { } } } - - list instantiation-parameters { - key "nsName"; - uses ns_instantiate; - } } \ No newline at end of file diff --git a/models/yang/nsd-base.yang b/models/yang/nsd-base.yang index df99563..c164078 100644 --- a/models/yang/nsd-base.yang +++ b/models/yang/nsd-base.yang @@ -100,7 +100,7 @@ module nsd-base description "NSD parameter pool name to use for this parameter"; type string; } - } + } // primitive-parameter grouping nsd-descriptor-common { leaf id { @@ -157,11 +157,7 @@ module nsd-base different NS."; key "name"; - leaf name { - description - "Name of the NS connection point."; - type string; - } + uses nsd-connection-point-common; leaf type { description @@ -169,15 +165,6 @@ module nsd-base 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"; @@ -419,113 +406,71 @@ module nsd-base 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 { @@ -534,25 +479,7 @@ module nsd-base 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"; @@ -598,51 +525,8 @@ module nsd-base // } 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; @@ -744,12 +628,60 @@ module nsd-base } } } - } + } // 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."; @@ -810,30 +742,126 @@ module nsd-base 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 @@ -851,5 +879,5 @@ module nsd-base uses manotypes:monitoring-param-value; uses manotypes:monitoring-param-ui-data; uses manotypes:monitoring-param-aggregation; - } + } // monitoring-param-common } diff --git a/models/yang/nsi.yang b/models/yang/nsi.yang new file mode 100644 index 0000000..32087d3 --- /dev/null +++ b/models/yang/nsi.yang @@ -0,0 +1,93 @@ +//INFORMATION +//organization "CTTC"; +//contact "Pol Alemany, Ricard Vilalta, Juan Luis de la Cruz"; +//description "Network Slice components definition"; + +// MODULE STRUCTURE +module nsi { + //header information + yang-version 1; + namespace "urn:ietf:params:xml:ns:yang:nfvo:nsi"; + prefix "nsi"; + + import nst { + prefix "nst"; + } + + import nsr { + prefix "nsr"; + } + + import vlr { + prefix "vlr"; + } + + import rw-project { + prefix "rw-project"; + } + + import instantiation-parameters { + prefix "instantiation-parameters"; + } + + //revision history + revision 2018-09-28 { + description "Initial version"; + } + + grouping nsi { + leaf id { + type string; + } + leaf nst-ref { + type leafref { + path "/nst:nst/nst:id"; + } + } + + container instantiation-parameters { + list netslice-subnet { + key "nsdId"; + uses instantiation-parameters:ns_instantiate; + } + list netslice-vld { + key "name"; + uses instantiation-parameters:vld; + } + } + + container network-slice-template { + uses nst:network-slice; + } + + list nsr-ref-list{ + config false; + key "nsr-ref"; + leaf nsr-ref { + description "Reference to instantiated NSR"; + config false; + type leafref { + path "/rw-project:project/nsr:ns-instance-opdata/nsr:nsr/nsr:ns-instance-config-ref"; + } + } + } + + list vlr-ref-list{ + key "vlr-ref"; + config false; + leaf vlr-ref { + description "Reference to instantiated VLR"; + config false; + type leafref { + path "/rw-project:project/vlr:vlr-catalog/vlr:vlr/vlr:id"; + } + } + } + } + + list nsi{ + key "id"; + uses nsi; + } + +} diff --git a/models/yang/nst.yang b/models/yang/nst.yang new file mode 100644 index 0000000..b501dae --- /dev/null +++ b/models/yang/nst.yang @@ -0,0 +1,331 @@ +//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; + } +} -- 2.17.1