"""
OpenFlow Test Framework

Configuration fragment

This file contains Python code to specify the configuration
of the system under test.

This is a work in progress.  The code below is for illustration only.

The configuration information is extensible in that any 
Python code may be added to this file (or its imports) and will 
be available to test cases.  

A platform identifier is given at the top of the file and most
other information is determined by testing this value.  Additional
files may also be imported based on the platform.

The configuration must specify a mapping from system interfaces
available to the test framework to OpenFlow port numbers on the
switch under test.  This is done in the interface_ofport_map
dictionary.  Future extensions may include specifying a driver
for the port (so as to allow remote packet generation) and to
specify a switch instance (to allow multiple switches to be
tested together).

Currently, the assumption is that ports are bidirectional, so
specifying "OF port 1 is connnected to eth2" implies this is so
for both TX and RX.

"""

##@var platform
# A string representing the platform under test.  Tested below
# for determining other variables.

##@var switch_cxn_type
# How does the test framework communicate to the switch?
#
# Options include:
# @arg localhost:   Switch is running on same host as tests
# @arg ssh:         Use paramiko to control ssh connection. Needs switch
# IP and other params
#
# For ssh, additional variables include
# @arg switch_ip = "192.168.2.21"
# @arg switch_username = "root"
# @arg switch_password

##@var switch_init
# A function to be called to initialize the switch.  May be None
# to indicate no such function needs to be called.

##@var switch_connect
# Function to be called to prompt the switch to connect to the
# controller.  The function may need to maintain connection state 
# as it could be called multiple times between disconnects.

##@var switch_disconnect
# Function to be called to force the switch to disconnect from the
# controller. 

##@var controller_host
# Gives the controller host address to use

##@var controller_port
# Gives the controller port to use

# platform = "sw_userspace"
# platform = "sw_kernelspace"
platform = "bcm_indigo"
# platform = "stanford_lb4g"


# These can be moved into platform specific code if needed

RCV_TIMEOUT_DEFAULT = 10
RCV_SIZE_DEFAULT = 4096
CONTROLLER_HOST_DEFAULT = ''
CONTROLLER_PORT_DEFAULT = 6633

# Number of switch connection requests to queue
LISTEN_QUEUE_SIZE = 1

if platform == "sw_userspace":
    interface_ofport_map = {
        1 : "eth2",
        2 : "eth3",
        3 : "eth4",
        4 : "eth5"
        }
    switch_cxn_type = "localhost"
    switch_init = None  # TBD
    switch_connect = None  # TBD
    switch_disconnect = None  # TBD
    controller_host = "172.27.74.158"
    controller_port = 7000

elif platform == "bcm_indigo":
    interface_ofport_map = {
        1 : "eth2",
        2 : "eth3",
        3 : "eth4",
        4 : "eth5"
        }
    # For SSH connections to switch
    switch_cxn_type = "ssh"
    switch_ip = "192.168.2.21"
    switch_username = "root"
    switch_password = "OpenFlow"
    switch_init = None  # TBD
    switch_connect = None  # TBD
    switch_disconnect = None  # TBD
    controller_host = "192.168.2.2"
#    controller_host = "172.27.74.26"
    controller_port = 7000


# Debug levels
DEBUG_ALL = 0
DEBUG_VERBOSE = 1
DEBUG_INFO = 2
DEBUG_WARN = 3
DEBUG_ERROR = 4
DEBUG_CRITICAL = 5
DEBUG_NONE = 6 # For current setting only; not for string level

dbg_string = [
    "DBG ALL  ",
    "VERBOSE  ",
    "INFO     ",
    "WARN     ",
    "ERROR    ",
    "CRITICAL "
    ]

def debug_log(module, cur_level, level, string):
    """
    Log a debug message

    Compare the debug level to the current level and display
    the string if appropriate.
    @param module String representing the module reporting the info/error
    @param cur_level The module's current debug level
    @param level The level of the error message
    @param string String to report

    @todo Allow file logging options, etc
    @todo Add timestamps
    """

    if level >= cur_level:
        #@todo Support output redirection based on debug level
        print module + ":" + dbg_string[level] + ":" + string

