/* * * Copyright 2017 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * */ module nsd-base { namespace "http://riftio.com/ns/riftware-1.0/nsd-base"; prefix "nsd-base"; import rw-pb-ext { prefix "rwpb"; } import ietf-inet-types { prefix "inet"; } import mano-types { prefix "manotypes"; } revision 2017-02-28 { description "Initial revision. This YANG file defines the Network Service Descriptor (NSD) common groupings"; reference "Derived from earlier versions of base YANG files"; } typedef scaling-trigger { type enumeration { enum pre-scale-in { value 1; } enum post-scale-in { value 2; } enum pre-scale-out { value 3; } enum post-scale-out { value 4; } } } typedef scaling-policy-type { type enumeration { enum manual { value 1; } enum automatic { value 2; } } } typedef scaling-criteria-operation { type enumeration { enum AND { value 1; } enum OR { value 2; } } } grouping primitive-parameter { leaf name { description "Name of the parameter."; type string; } leaf data-type { description "Data type associated with the name."; type manotypes:parameter-data-type; } leaf mandatory { description "Is this field mandatory"; type boolean; default false; } leaf default-value { description "The default value for this field"; type string; } leaf parameter-pool { description "NSD parameter pool name to use for this parameter"; type string; } } grouping nsd-descriptor-common { leaf id { description "Identifier for the NSD."; type string { length 1..63; } } leaf name { description "NSD name."; mandatory true; type string; } leaf short-name { description "Short name to appear as label in the UI"; type string; } leaf vendor { description "Vendor of the NSD."; type string; } leaf logo { description "File path for the vendor specific logo. For example icons/mylogo.png. The logo should be part of the network service"; type string; } leaf description { description "Description of the NSD."; type string; } leaf version { description "Version of the NSD"; type string; } list connection-point { 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."; key "name"; leaf name { description "Name of the NS connection point."; type string; } leaf type { description "Type of the connection point."; type manotypes:connection-point-type; } } list scaling-group-descriptor { description "scaling group descriptor within this network service. The scaling group defines a group of VNFs, and the ratio of VNFs in the network service that is used as target for scaling action"; key "name"; leaf name { description "Name of this scaling group."; type string; } list scaling-policy { key "name"; leaf name { description "Name of the scaling policy"; type string; } leaf scaling-type { description "Type of scaling"; type scaling-policy-type; } leaf enabled { description "Specifies if the scaling policy can be applied"; type boolean; default true; } leaf scale-in-operation-type { description "Operation to be applied to check between scaling criterias to check if the scale in threshold condition has been met. Defaults to AND"; type scaling-criteria-operation; default AND; } leaf scale-out-operation-type { description "Operation to be applied to check between scaling criterias to check if the scale out threshold condition has been met. Defauls to OR"; type scaling-criteria-operation; default OR; } leaf threshold-time { description "The duration for which the criteria must hold true"; type uint32; mandatory true; } leaf cooldown-time { description "The duration after a scaling-in/scaling-out action has been triggered, for which there will be no further optional"; type uint32; mandatory true; } list scaling-criteria { description "list of conditions to be met for generating scaling requests"; key "name"; leaf name { type string; } leaf scale-in-threshold { description "Value below which scale-in requests are generated"; type uint64; } leaf scale-out-threshold { description "Value above which scale-out requests are generated"; type uint64; } leaf ns-monitoring-param-ref { description "Reference to the NS level monitoring parameter that is aggregated"; type leafref { path "../../../../monitoring-param/id"; } } } } list vnfd-member { description "List of VNFs in this scaling group"; key "member-vnf-index-ref"; leaf member-vnf-index-ref { description "member VNF index of this member VNF"; type leafref { path "../../../constituent-vnfd/member-vnf-index"; } } leaf count { description "count of this member VNF within this scaling group. The count allows to define the number of instances when a scaling action targets this scaling group"; type uint32; default 1; } } leaf min-instance-count { description "Minimum instances of the scaling group which are allowed. These instances are created by default when the network service is instantiated."; type uint32; default 0; } leaf max-instance-count { description "Maximum instances of this scaling group that are allowed in a single network service. The network service scaling will fail, when the number of service group instances exceed the max-instance-count specified."; type uint32; default 10; } list scaling-config-action { description "List of scaling config actions"; key "trigger"; leaf trigger { description "scaling trigger"; type scaling-trigger; } leaf ns-service-primitive-name-ref { description "Reference to the NS service primitive"; type leafref { path "../../../service-primitive/name"; } } } } list vnffgd { description "List of VNF Forwarding Graph Descriptors (VNFFGD)."; 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; } list rsp { description "List of Rendered Service Paths (RSP)."; key "id"; leaf id { description "Identifier for the RSP."; type string; } leaf name { description "RSP name."; type string; } list vnfd-connection-point-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"; } } 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 { description "List of classifier rules."; 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"; } } leaf member-vnf-index-ref { description "Reference to member-vnf within constituent-vnfds"; type leafref { path "../../../constituent-vnfd/member-vnf-index"; } } 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"; } } 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; } 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; list initial-service-primitive { rwpb:msg-new NsdInitialServicePrimitive; description "Initial set of service primitives for NSD."; key "seq"; uses manotypes:event-config; } list terminate-service-primitive { rwpb:msg-new NsdTerminateServicePrimitive; description "Set of service primitives during termination for NSD."; key "seq"; uses manotypes:event-config; } uses manotypes:input-parameter-xpath; list parameter-pool { description "Pool of parameter values which must be pulled from during configuration"; key "name"; leaf name { description "Name of the configuration value pool"; type string; } container range { description "Create a range of values to populate the pool with"; leaf start-value { description "Generated pool values start at this value"; type uint32; mandatory true; } leaf end-value { description "Generated pool values stop at this value"; type uint32; mandatory true; } } } list key-pair { key "name"; description "Used to configure the list of public keys to be injected as part of ns instantiation"; leaf name { description "Name of this key pair"; type string; } leaf key { description "Key associated with this key pair"; type string; } } list user { key "name"; description "List of users to be added through cloud-config"; leaf name { description "Name of the user "; type string; } leaf user-info { description "The user name's real name"; type string; } list key-pair { key "name"; description "Used to configure the list of public keys to be injected as part of ns instantiation"; leaf name { description "Name of this key pair"; type string; } leaf key { description "Key associated with this key pair"; type string; } } } } grouping nsd-vld-common { /* Still having issues modelling this, see the comments under vnfd-connection-point-ref */ description "List of Virtual Link Descriptors."; leaf id { description "Identifier for the VLD."; type string; } leaf name { description "Virtual Link Descriptor (VLD) name."; type string; } leaf short-name { description "Short name to appear as label in the UI"; type string; } leaf vendor { description "Provider of the VLD."; type string; } leaf description { description "Description of the VLD."; type string; } leaf version { description "Version of the VLD"; type string; } leaf type { type manotypes:virtual-link-type; } leaf root-bandwidth { description "For ELAN this is the aggregate bandwidth."; type uint64; } leaf leaf-bandwidth { description "For ELAN this is the bandwidth of branches."; type uint64; } // replicate for pnfd container here uses manotypes:provider-network; leaf mgmt-network { description "Flag indicating whether this network is a VIM management network"; type boolean; default false; } leaf ipv4-nat-pool-name{ type string; description "IPV4 nat pool name"; } 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"; } } } } } grouping monitoring-param-common { description "List of monitoring parameters from VNF's that should be propogated up into NSR"; leaf id { type string; } leaf name { type string; } uses manotypes:monitoring-param-value; uses manotypes:monitoring-param-ui-data; uses manotypes:monitoring-param-aggregation; } }