##
# Copyright 2016 Telefónica Investigación y Desarrollo, S.A.U.
# This file is part of openvim
# 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
##

network:
    name:               data_net
    type:               data

    #if you want to connect this network to a concrete switch port for outside connectivity
    #indicate it at provider_physical with openflow:<switch_port>[:vlan]
    #<switch_port> must be a valid openflow port (one of the listed with openvim openflow-port-list)
    #add [:vlan] without spaces if this port must be vlan tagged. If missing it is not tagged

    #provider:vlan  contains the vlan used by the SRIOV interfaces connected to this network
    #it always contain a value regardless used or not. If missing openvim will assign a value
    
    provider:physical:  openflow:port1/8:vlan
    provider:vlan:      3001
    shared:             true

