##
# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
# This file is part of openmano
# All Rights Reserved.
#
# 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.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact with: nfvlabs@tid.es
##
---
vnf:
    name:        dataplaneVNF2
    description: "Example of a dataplane VNF consisting of a single VM for data plane workloads with high I/O performance requirements: 3 cores, 8 GB hugepages, 2 10G interfaces and 1 SR-IOV interface"
    external-connections:
    -   name:              mgmt
        type:              mgmt       # "mgmt"(autoconnect to management net)
        VNFC:              dataplaneVNF2-VM
        local_iface_name:  eth0
        description:       Management interface for general use
    -   name:              control
        type:              bridge
        VNFC:              dataplaneVNF2-VM
        local_iface_name:  eth1
        description:       Bridge interface
    -   name:              xe0
        type:              data
        VNFC:              dataplaneVNF2-VM
        local_iface_name:  xe0
        description:       Dataplane interface 1
    -   name:              xe1
        type:              data
        VNFC:              dataplaneVNF2-VM
        local_iface_name:  xe1
        description:       Dataplane interface 2
    -   name:              xe2
        type:              data
        VNFC:              dataplaneVNF2-VM
        local_iface_name:  xe2
        description:       Dataplane interface 3 (SR-IOV)
    VNFC:
    -   name:        dataplaneVNF2-VM
        description: "Dataplane VM with high I/O performance requirements: 3 cores (no hyperthreading), 8 GB hugepages, 2 10G interfaces and 1 SR-IOV interface"
        #Copy the image to a compute path and edit this path
        VNFC image:  /path/to/imagefolder/dataplaneVNF2.qcow2
        numas: 
        -   cores: 3          # "cores", "paired-threads", "threads"
            memory: 8                 # GBytes
            interfaces:
            -   name:      xe0
                vpci:      "0000:00:11.0"
                dedicated: "yes"         # "yes"(passthrough), "no"(sriov with vlan tags), "yes:sriov"(sriovi, but exclusive and without vlan tag)
                bandwidth: 10 Gbps
            -   name:      xe1
                vpci:      "0000:00:12.0"
                dedicated: "yes"
                bandwidth: 10 Gbps
            -   name:      xe2
                vpci:      "0000:00:13.0"
                dedicated: "no"
                bandwidth: 1 Gbps
        bridge-ifaces:
        -   name:      eth0
            vpci:      "0000:00:09.0"
            bandwidth: 1 Mbps          # Optional, informative only
        -   name:      eth1
            vpci:      "0000:00:10.0"
            bandwidth: 1 Mbps          # Optional, informative only

