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

#host bridge interfaces for networks
# Openvim cannot create bridge networks automatically, in the same way as other CMS do.
# 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" that accept 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
