##
# 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
##



#Miscellaneous
#Option to test openvim without the needed infrastructure, possible values are
#    "normal"      by default, Openflow controller (OFC), switch and real host are needed
#    "test"        Used for testing http API and database without connecting to host or to OFC
#    "host only"   Used when neither OFC nor OF switch are provided. 
#                  Dataplane network connection must be done manually.
#    "OF only"     Used for testing of new openflow controllers support. No real VM deployments will be done but
#                  OFC will be used as in real mode
#    "development" Forced a cloud-type deployment, nomal memory instead of hugepages is used, 
#                  without cpu pinning, and using a bridge network instead of a real OFC dataplane networks.
#                  The same 'development_bridge' (see below) is used for all dataplane networks
mode: test

#Openflow controller information
of_controller:      floodlight                   # Type of controller to be used. 
                                                 # Valid controllers are 'opendaylight', 'floodlight' or <custom>
#of_controller_module: module                    # Only needed for <custom>.  Python module that implement
                                                 # this controller. By default a file with the name  <custom>.py is used 
#of_<other>:           value                     # Other parameters required by <custom> controller. Consumed by __init__
of_user:            user credentials             # User credentials for the controller if needed
of_password:        passwd credentials           # Password credentials for the controller if needed
of_controller_ip:   127.0.0.1                    # IP address where the Openflow controller is listening
of_controller_port: 7070                         # TCP port where the Openflow controller is listening (REST API server)
of_controller_dpid: '00:01:02:03:04:05:06:07'    # Openflow Switch identifier (put here the right number)

#This option is used for those openflow switch that cannot deliver one packet to several output with different vlan tags
#When set to true, it fails when trying to attach different vlan tagged ports to the same net
of_controller_nets_with_same_vlan: false         # (by default, true)

#Server parameters
http_host:       localhost           # IP address where openvim is listening (by default, localhost)
http_port:       9080                # General port where openvim is listening (by default, 9080)
http_admin_port: 9085                # Admin port where openvim is listening (when missing, no administration server is launched)

#database parameters
db_host:   0.0.0.0                   # by default localhost
db_user:   vim                       # DB user
db_passwd: vimpw                     # DB password
db_name:   vim_db                    # Name of the VIM DB

#host paremeters
image_path: "/opt/VNF/images"        # Folder, same for every host, where the VNF images will be copied

#testing parameters (used by ./test/test_openvim.py)
tenant_id: fc7b43b6-6bfa-11e4-84d2-5254006d6777   # Default tenant identifier for testing

#VLAN ranges used for the dataplane networks (ptp, data)
#When a network is created an unused value in this range is used
network_vlan_range_start: 3000
network_vlan_range_end:   4000

# Network overlay supported by openvim compute, bsae on openvswicth or linux bridges to manage management networks for NFVs.
# - ovs : Create a vlxan mesh between computes to handle the network overlay, no prepopulated bridges or networks is need it.
# - bridge: Use pre-populate linux bridges by openvim configuration scripts.

network_type : ovs

#host bridge interfaces for networks
# Openvim cannot create bridge networks automatically, in the same way as other CMS do when network type is "bridge".
# Bridge networks need to be pre-provisioned on each host and Openvim uses those pre-provisioned bridge networks.
# Openvim assumes that the following bridge interfaces have been created on each host, appropriately associated to a physical port.
# The following information needs to be provided:
#    - Name of the bridge (identical in all hosts)
#    - VLAN tag associated to each bridge interface
#    - The speed of the physical port in Gbps, where that bridge interface was created
# For instance, next example assumes that 10 bridges have been created on each host
# using vlans 2001 to 2010, associated to a 1Gbps physical port 
#bridge_ifaces:
#   #name:      [vlan, speed in Gbps]
#   virbrMan1:  [2001, 1]
#   virbrMan2:  [2002, 1]
#   virbrMan3:  [2003, 1]
#   virbrMan4:  [2004, 1]
#   virbrMan5:  [2005, 1]
#   virbrMan6:  [2006, 1]
#   virbrMan7:  [2007, 1]
#   virbrMan8:  [2008, 1]
#   virbrMan9:  [2009, 1]
#   virbrMan10: [2010, 1]

#Used only when 'mode' is at development'. Indicates which 'bridge_ifaces' is used for dataplane networks
#development_bridge: virbrMan10

#DHCP SERVER PARAMETERS. 
#In case some of the previous 'bridge_ifaces' are connected to an EXTERNAL dhcp server, provide 
#   the server parameters to allow openvim getting the allocated IP addresses of virtual machines
#   connected to the indicated 'bridge_ifaces' and or 'nets'. Openvim will connect to the dhcp server by ssh.
#DHCP server must contain a shell script "get_dhcp_lease.sh" included in the path, that accepts a mac address as 
#   parameter and return empty or the allocated IP address. See an example at the end of the file 
#   ./openvim/dhcp_thread.py 
#COMMENT all lines in case you do not have a DHCP server in 'normal', 'development'  or 'host only' modes.
#   For 'test' or 'OF only' modes you can leave then uncommented, because in these modes fake IP 
#   address are generated instead of connecting with a real DHCP server.
dhcp_server:
   host:     host-ip-or-name  
   #port:     22               #ssh port, by default 22
   provider: isc-dhcp-server  #dhcp-server type
   user:     user
   #provide password, or key if needed
   password: passwd           
   #key:     ssh-access-key
   #list of the previous bridge interfaces attached to this dhcp server
   bridge_ifaces:   [ virbrMan1, virbrMan2 ] 
   #list of the networks attached to this dhcp server
   nets: [default]


#logging parameters       # DEBUG, INFO, WARNING, ERROR, CRITICAL
log_level:       ERROR
log_level_db:    DEBUG
log_level_of:    DEBUG


