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

ofc:
    #Openflow controller information
    name: 'sdn'                        # SDN controller name
    dpid: '00:01:02:03:04:05:06:07'    # Openflow Switch identifier (put here the right number)
    ip: 127.0.0.1                      # IP address where the Openflow controller is listening
    port: 7070                         # TCP port where the Openflow controller is listening (REST API server)
    type: floodlight                   # Type of controller to be used. Valid controllers are 'opendaylight', 'onos', 'floodlight' or <custom>
    version: 0.0.0                     # SDN contorller version
    user: user                         # User credentials for the controller if needed
    password: passwd                   # Password credentials for the controller if needed
