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