#!/usr/bin/env python

'''
This driver handles the optical switch emulator linc-oe.

Please follow the coding style demonstrated by existing
functions and document properly.

If you are a contributor to the driver, please
list your email here for future contact:

    andrew@onlab.us

OCT 20 2014
'''

import traceback
import pexpect
import struct
import fcntl
import os
import signal
import re
import sys
import core.teston
sys.path.append("../")
from math import pow
from drivers.common.cli.emulatordriver import Emulator
from drivers.common.clidriver import CLI

class LincOEDriver(Emulator):
    '''
    LincOEDriver class will handle all emulator functions    
    '''
    def __init__(self):
        super(Emulator, self).__init__()
        self.handle = self
        self.wrapped = sys.modules[__name__]
        self.flag = 0

    def connect(self, **connectargs):
        '''
        Create ssh handle for Linc-OE cli
        '''
        for key in connectargs:
            vars(self)[key] = connectargs[key]       
        
        self.name = self.options['name']
        self.handle = \
                super(LincOEDriver, self).connect(\
                user_name = self.user_name,
                ip_address = self.ip_address,
                port = None, 
                pwd = self.pwd)
        
        self.ssh_handle = self.handle
        
        if self.handle :
            self.home = "~/linc-oe"
            self.handle.sendline("cd "+self.home)

            main.log.info(self.name+": Starting Linc-OE CLI")
            cmdStr = "sudo ./rel/linc/bin/linc console"
            
            self.handle.sendline(cmdStr)
            #Sending blank lines "shows" the CLI
            self.handle.sendline("")
            self.handle.sendline("")
            self.handle.expect(["linc@",pexpect.EOF,pexpect.TIMEOUT])

        else:
            main.log.error(self.name+
                    ": Connection failed to the host "+
                    self.user_name+"@"+self.ip_address) 
            main.log.error(self.name+
                    ": Failed to connect to Linc-OE")
            return main.FALSE

    def build(self):
        '''
        Build Linc-OE with the specified settings
        '''
        try:
            self.handle.sendline("make rel")
            
            return main.TRUE

        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()

    def set_interface_up(self, intfs):
        '''
        Specify interface to bring up.
        When Linc-OE is started, tap interfaces should
        be created. They must be brought up manually
        '''
        try:
            self.handle.sendline("ifconfig "+str(intf)+" up")
            self.handle.expect("linc@")
   
            handle = self.handle.before

            return handle

        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()

    def start_switch(self, sw_id):
        '''
        Start a logical switch using switch id
        '''
        try:
            self.handle.sendline("linc:start_switch("+str(sw_id)+").")
            self.handle.expect("linc@")

            handle = self.handle.before

        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()

    def stop_switch(self, sw_id):
        '''
        Stop a logical switch using switch id
        '''
        try:
            self.handle.sendline("linc:stop_switch("+str(sw_id)+").")
            self.handle.expect("linc@")

            handle = self.handle.before

        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()
     
    def get_datapath_id(self, sw_id):
        '''
        Get datapath id of a specific switch by switch id
        '''
        try:
            self.handle.sendline("linc_logic:get_datapath_id("+
                    str(sw_id)+").")
            self.handle.expect("linc@")

            handle = self.handle.before
        
        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()

    def list_ports(self, sw_id):
        '''
        List all ports of a switch by switch id
        '''
        try:
            self.handle.sendline("linc:ports("+str(sw_id)+").")
            self.handle.expect("linc@")

            handle = self.handle.before

        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()

    def port_up(self, sw_id, pt_id):
        '''
        Bring port up using switch id and port id
        '''
        try:
            self.handle.sendline("linc:port_up("+
                    str(sw_id)+", "+str(pt_id)+").")
            self.handle.expect("linc@")

            handle = self.handle.before

        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()
    
    def port_down(self, sw_id, pt_id):
        '''
        Bring port down using switch id and port id
        '''
        try:
            self.handle.sendline("linc:port_down("+
                    str(sw_id)+", "+str(pt_id)+").")
            self.handle.expect("linc@")

            handle = self.handle.before

        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()

    def disconnect(self):
        '''
        Send disconnect prompt to Linc-OE CLI
        (CTRL+C)
        '''
        try:
            #Send CTRL+C twice to exit CLI
            self.handle.sendline("\x03")
            self.handle.sendline("\x03")
            self.handle.expect("\$")

        except pexpect.EOF:
            main.log.error(self.name+ ": EOF exception")
            main.log.error(self.name+ ":    " + self.handle.before)
            main.cleanup()
            main.exit()
        except:
            main.log.info(self.name+" :::::::")
            main.log.error( traceback.print_exc())
            main.log.info(self.name+" :::::::")
            main.cleanup()
            main.exit()

if __name__ != "__main__":
    import sys
    sys.modules[__name__] = LincOEDriver()

