# 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. ########################################################################### # The content of this file reflects TOSCA nfv Profile in YAML version # 1.0.0, which is derived from TOSCA Simple Profile. It describes the # definition for nfv TOSCA types including Node Type, # Relationship Type, Capability Type and Interfaces. ########################################################################### tosca_definitions_version: tosca_simple_yaml_1_0 metadata: template_name: tosca_simple_profile_for_nfv template_author: opnfv_parser_project template_version: tosca_simple_profile_for_nfv_1_0 ########################################################################### # Node Type. # A Node Type is a reusable entity that defines the type of one or more # Node Templates. ########################################################################### node_types: tosca.nodes.nfv.VNF: derived_from: tosca.nodes.Root properties: id: type: string description: ID of this VNF vendor: type: string description: name of the vendor which provides this VNF version: type: version description: version of the software for this VNF requirements: - virtualLink: capability: tosca.capabilities.nfv.VirtualLinkable tosca.nodes.nfv.VDU: derived_from: tosca.nodes.SoftwareComponent properties: id: type: string required: true description: > A unique identifier of this VDU within the scope of the VNFD, including version functional description and other identification information. This will be used to refer to VDU when defining relationships between them. capabilities: high_availability: type: tosca.capabilities.nfv.HA virtualbinding: type: tosca.capabilities.nfv.VirtualBindable monitoring_parameter: type: tosca.capabilities.nfv.Metric requirements: - high_availability: capability: tosca.capabilities.nfv.HA relationship: tosca.relationships.nfv.HA occurrences: [ 0, 1 ] - host: capability: tosca.capabilities.Container node: tosca.nodes.Compute relationship: tosca.relationships.HostedOn tosca.nodes.nfv.CP: derived_from: tosca.nodes.Root properties: type: type: string required: false attributes: IP_address: type: string required: false requirements: - virtualLink: capability: tosca.capabilities.nfv.VirtualLinkable - virtualbinding: capability: tosca.capabilities.nfv.Virtualbindable tosca.nodes.nfv.VL: derived_from: tosca.nodes.Root properties: vendor: type: string required: true description: name of the vendor who generate this VL capabilities: virtual_linkable: type: tosca.capabilities.nfv.VirtualLinkable tosca.nodes.nfv.VL.ELine: derived_from: tosca.nodes.nfv.VL capabilities: virtual_linkable: occurrences: 2 tosca.nodes.nfv.VL.ELAN: derived_from: tosca.nodes.nfv.VL tosca.nodes.nfv.VL.ETree: derived_from: tosca.nodes.nfv.VL tosca.nodes.nfv.FP: derived_from: tosca.nodes.Root properties: policy: type: string required: false description: name of the vendor who generate this VL requirements: - forwarder: capability: tosca.capabilities.nfv.Forwarder ########################################################################## # Capability Type. # A Capability Type is a reusable entity that describes a kind of # capability that a Node Type can declare to expose. ########################################################################## capability_types: tosca.capabilities.nfv.VirtualBindable: derived_from: tosca.capabilities.Root tosca.capabilities.nfv.HA: derived_from: tosca.capabilities.Root valid_source_types: [ tosca.nodes.nfv.VDU ] tosca.capabilities.nfv.HA.ActiveActive: derived_from: tosca.capabilities.nfv.HA tosca.capabilities.nfv.HA.ActivePassive: derived_from: tosca.capabilities.nfv.HA tosca.capabilities.nfv.Metric: derived_from: tosca.capabilities.Root tosca.capabilities.nfv.Forwarder: derived_from: tosca.capabilities.Root tosca.capabilities.nfv.VirtualLinkable: derived_from: tosca.capabilities.Root tosca.capabilities.nfv.CPU_extension: derived_from: tosca.capabilities.Root properties: cpu_instruction_set_extension: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > Instruction sets are often enhanced with instruction set extensions. This element represents instruction set extensions that the VDU has been developed, optimized or tested with cpu_model: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > The CPU model for which the VDU has been developed, compiled with CPU model specific optimisations, optimized or validated on. cpu_model_specification_binding: type: string required: false description: > VDUs may be developed, compiled, optimized or validated on particular CPU models. Some deployments may wish to permit the VDU to be deployed on a platform with the specified CPU only, or with an alternative CPU with the same architecture, instruction set, and if specified, instruction set extensions, or with a CPU of equivalent or greater capability. cpu_min_clock_speed: type: string required: false description: > The minimum CPU clock speed may be one of the elements that the development and validation of the VDU has been considered with. This may be in conjunction with some of the other CPU elements such as CPU Model. Requiring a minimum clock speed may be part of a deployment requirement necessary to help ensure particular performance or timing related characteristics are met in the deployment. cpu_core_reservation: type: string required: false description: > The number of CPU cores allocated to the VDU. This may be necessary to help ensure particular performance or timing related characteristics are met in the deployment. cpu_simultaneous_multi_threading_hw_thread_specification: type: string required: false description: > The use of Simultaneous Multi-Threading HW is an efficient way to increase the compute capacity of a platform. SMT HW threads share some CPU core resources. In some VDU implementations, it may be necessary to very explicitly control the HW thread allocation on a platform. This could be to help ensure locality in data caches or as a mechanism to enhance determinism. cpu_core_oversubscription_policy: type: string required: false description: > The VDU may co-exist on a platform with multiple VDUs or VMs and as such will be sharing CPU core resources available in the platform. It may be necessary to specify the CPU core oversubscription policy in terms of virtual cores to physical cores/threads on the platform. This policy could be based on required VDU deployment characteristics such as high performance, low latency, and /or deterministic behaviour. cpu_core_and_hw_thread_allocation_topology_policy: type: string required: false description: > The VDU may be designed to use a specific mapping of virtual CPUs to HW threads or cores with a specific allocation topology in order to ensure locality in data caches and maximize performance. The VDU will not specify which physical resources to use, but may specify if virtual CPUs shall be coupled together as HW threads belonging to the same core, or as belonging to the same processor. cpu_last_level_cache_size: type: scalar-unit.size required: false constraints: - greater_or_equal: 0 KB description: > The size of the last level cache may impact the performance of the VDU, particularly for cache intensive workloads. cpu_direct_io_access_to_cache: type: string required: false description: > The ability of an I/O device to have direct access to the CPU cache enables considerable memory access savings and for I/O intensive workloads can offer significant performance benefits. cpu_translation_look_aside_buffer_parameter: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > The Translation Look-aside Buffer (TLB) is a cache for address translation typically used by a hardware based memory management units. The Input/Output TLB (IOTLB) is a cache for address translation related to remapping hardware. The availability of a TLB and an IOTLB can significantly improve the performance of a virtual machine. A number of parameters of the TLBs impact the performance potential. These include: 1 TLB Size. 2 TLB Large Page Support. 3 IOTLB Size. 4 IOTLB Large Page Support. cpu_hot_add: type: boolean required: false description: > Hot add CPU is the ability to dynamically add CPUs to a running system. The new CPU can immediately replace a failing CPU via migration or be brought on-line later. cpu_support_accelerator: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > This capability refers to support by the CPU and associated chipsets of a data processing accelerator framework, together with its libraries and drivers. tosca.capabilities.nfv.Memory_extension: derived_from: tosca.capabilities.Root properties: memory_parameter: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > There are a number of memory related parameters that can have a significant impact on the performance and/or reliability of the VDU. These include: • Memory Type. • Memory Speed • Number of memory channels. • Size of available memory. • Reliability characteristics such as Memory Error Correction codes. • Memory oversubscription policy. • Memory bandwidth required per VDU. • Number of large pages required per VDU • Non-Uniform Memory Architecture (NUMA) Allocation Policy, i.e. in NUMA architecture how you specify memory allocation that is cognisant of the relevant process/core allocation. This applies also to allocation of huge pages. memory_hot_add: type: boolean required: false description: > Hot add memory is the ability to add physical memory while the system is running. Added memory can immediately replace failing memory via migration or be brought on-line later. tosca.capabilities.nfv.Hypervisors: derived_from: tosca.capabilities.Root properties: hypervisors: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > There are a number of hypervisor related parameters that can have a significant impact on the deployment and performance of the VDU. These include: • Hypervisor type • Hypervisor version as a VDU may be validated with a particular version. • Hypervisor Address Translation support parameters including: o Second Level Address Translation. o Second Level Address Translation with Large page support. o Second Level Address Translation for I/O. o Second Level Address Translation for I/O with Large page. support. Where "Large" is considered to be 1 GB or greater. o Support for interrupt remapping, i.e. supporting the IOMMU in the hypervisor. o Support of data processing acceleration libraries in the hypervisor, i.e. for acceleration libraries which require hypervisor support for high performance. tosca.capabilities.nfv.PCIe: derived_from: tosca.capabilities.Root properties: platform_pcie_parameter: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > There are a number of PCIe related parameters that can have a significant impact on the deployment and performance of the VDU. These include: • PCIe generational capabilities. • PCIe bandwidth. • PCIe Device Pass-through. • PCIe SR-IOV as the VDU may require that an SR- IOV virtual vunction from the specified PCIe device can be allocated to the VM. • PCIe Device Assignment Affinity. The VDU may require for performance reasons the ability to allocate a partitionable PCIe Device capability such as a NIC port, an entire NIC or a NIC virtual function to the VDU while also ensuring that the selected device is locally connected to the same processor. platform_pcie_parameter: type: string required: false description: > Detecting and reporting correctable and un-correctable (fatal and non-fatal) PCIe errors to software for error handling and remediation. platform_acceleration_device: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > The VDU may have been developed, optimized or tested with an acceleration device such as a crypto accelerator that may typically be accessed over a PCIe bus. tosca.capabilities.nfv.network.Interfaces: derived_from: tosca.capabilities.Root properties: network_interface_card_capability: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > The VDU may have been developed, optimized or tested with certain NIC capabilities to benefit items such as performance or scalability. These include: • TCP Large Segmentation Offload (LSO) for offload the segmentation of large TCP messages into MTU sized packets from the CPU to the NIC. • Large Receive Offload (LRO), i.e. the inverse of LSO by coalescing incoming TCP/IP packets into larger segments for processing in the CPU. • Checksum Offload. • Receive Side Scaling (RSS), for packet distribution between cores. • Flow Director, for more fine grained (than RSS) packet distribution between cores. • Mirroring of packets between interfaces. • Availability of Independent Rx/Tx queues for VM so that queue pairs in the NIC can be allocated to the VMs. • Jumbo Frame support. • VLAN tag stripping. • RDMA support. • SR-IOV support. • Data processing acceleration software library support, e.g. DPDK ® - see note. network_interface_bandwidth: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > The network speed/bandwidth to be guaranteed per requested NIC. data_processing_acceleration_library: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > Name and version of the data processing acceleration library used. Orchestration can match any NIC that is known to be compatible with the specified library tosca.capabilities.nfv.network.Virtual_switches: derived_from: tosca.capabilities.Root properties: vswitch_capability: type: list required: false entry_schema: type: string constraints: - min_length: 1 description: > The VDU may have been developed, optimized or tested with a particular vSwitch and may require specifying the vSwitch type, version and key features such as overlay tunnel termination support. tosca.capabilities.nfv.Storage: derived_from: tosca.capabilities.Root properties: storage_requirement: type: scalar-unit.size required: false constraints: - greater_or_equal: 0 MB description: > Required storage characteristics (e.g. size), including Key Quality Indicators (KQIs) for performance and reliability/availability. rdma_support_bandwitdh: type: integer required: false constraints: - greater_or_equal: 0 description: > The VDU may have been developed, optimized or tested with a storage supporting RDMA over a given bandwidth. ########################################################################## # Relationship Type. # A Relationship Type is a reusable entity that defines the type of one # or more relationships between Node Types or Node Templates. ########################################################################## relationship_types: tosca.relationships.nfv.VirtualBindsTo: derived_from: tosca.relationships.ConnectsTo valid_target_types: [ tosca.capabilities.nfv.VirtualBindable ] tosca.relationships.nfv.HA: derived_from: tosca.relationships.Root valid_target_types: [ tosca.capabilities.nfv.HA ] tosca.relationships.nfv.Monitor: derived_from: tosca.relationships.ConnectsTo #??? valid_target_types: [ tosca.capabilities.nfv.Metric ] tosca.relationships.nfv.ForwardsTo: derived_from: tosca.relationships.root valid_target_types: [ tosca.capabilities.nfv.Forwarder ] tosca.relationships.nfv.VirtualLinksTo: derived_from: tosca.relationships.ConnectsTo valid_target_types: [ tosca.capabilities.nfv.VirtualLinkable ] ########################################################################## # groups Type. # as defined within the TOSCA nfv Simple Profile specification. # BWT:Not supported by tosca-parser currently, and will be added future. ########################################################################## #group_types: # tosca.groups.nfv.VNFFG: # derived_from: tosca.groups.Root # properties: # vendor: # type: string # required: true # description: name of the vendor who generate this VNFFG # version: # type: string # required: true # description: version of this VNFFG # number_of_endpoints: # type: integer # required: true # description: count of the external endpoints included in this VNFFG # dependent_virtual_link: # type: list # description: Reference to a VLD used in this Forwarding Graph # required: true # entry_schema: # type: string # connection_point: # type: list # description: Reference to Connection Points forming the VNFFG # required: true # entry_schema: # type: string # constituent_vnfs: # type: list # description: Reference to a list of VNFD used in this VNF Forwarding Graph # required: true # entry_schema: # type: string # targets: # type: list # required: false # description: list of Network Forwarding Path within the VNFFG # entry_schema: # type: string # requirements: # - forwarder: # capability: tosca.capabilities.Forwarder #datatype_definitions: ########################################################################## # Data Type. To be continue # A Datatype is a complex data type declaration which contains other # complex or simple data types. # BWT: will be added future. ########################################################################## #tosca.datatypes.network.XX: # properties: # network_name: # type: string # network_id: # type: string # addresses: # type: list # entry_schema: # type: string #artifact_types: ########################################################################## # Artifact Type.To be continue # An Artifact Type is a reusable entity that defines the type of one or more # files which Node Types or Node Templates can have dependent relationships # and used during operations such as during installation or deployment. # BWT: will be added future. ########################################################################## #tosca.artifacts.File.XXX: # derived_from: tosca.artifacts.Root