##
# 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:       0.0.0.0             # 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:   localhost                   # 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" 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
