##
# Copyright 2015 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:    network-name
    type:    data             # "bridge_data" or "bridge_man" for control plane, "data" for dataplane, or "ptp" for point to point dataplane
    provider:physical:   null # needed a value for a bridge_data, bridge_man,
                              # can be:
                              #    bridge:iface_name  : attached to a iface_name host bridge interface
                              #    macvtap:iface_name : attached to a iface_name host physical interface
                              #    default            : attached to the default host interface
                              #    null               : for data or ptp types. (To be changed in future versions)
    shared:              true # true, false: if shared it will consider by OPENVIM an EXTERNAL network available at OPENMANO

