adding TestON
diff --git a/TestON/drivers/__init__.py b/TestON/drivers/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/__init__.py
diff --git a/TestON/drivers/common/__init__.py b/TestON/drivers/common/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/__init__.py
diff --git a/TestON/drivers/common/api/__init__.py b/TestON/drivers/common/api/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/api/__init__.py
diff --git a/TestON/drivers/common/api/controller/__init__.py b/TestON/drivers/common/api/controller/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/api/controller/__init__.py
diff --git a/TestON/drivers/common/api/controllerdriver.py b/TestON/drivers/common/api/controllerdriver.py
new file mode 100644
index 0000000..f6b941f
--- /dev/null
+++ b/TestON/drivers/common/api/controllerdriver.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+'''
+Created on 29-Nov-2012 
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)      
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+'''  
+import sys
+sys.path.append("../")
+from drivers.common.apidriver import API
+
+class Controller(API):
+    # The common functions for emulator included in emulatordriver
+    def __init__(self):
+        super(API, self).__init__()
+        
diff --git a/TestON/drivers/common/api/fvtapidriver.py b/TestON/drivers/common/api/fvtapidriver.py
new file mode 100644
index 0000000..620b3e9
--- /dev/null
+++ b/TestON/drivers/common/api/fvtapidriver.py
@@ -0,0 +1,186 @@
+#!/usr/bin/env python
+'''
+Created on 26-Oct-2012
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+fvtapidriver is the basic driver which will handle the fvtapidriver functions
+'''
+'''
+There are two changes required in flowvisor-test framework :
+
+1. In ~/flowvisortests/tests/templatetest.py line : 15 comment 'basic_logger = None'
+2. In ~/flowvisortests/tests/testutils.py line : 50 specify config file path CONFIG_FILE = "~/flowvisor-test/tests/tests-base.json"
+
+'''
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+sys.path.append("../")
+from common.apidriver import API
+import logging
+
+sys.path.append(path+"/lib/flowvisor-test/tests")
+sys.path.append(path+"/lib/flowvisor-test/src/python/")
+
+import templatetest
+import testutils
+import oftest.cstruct as ofp
+import oftest.message as message
+import oftest.parse as parse
+import oftest.action as action
+import oftest.error as error
+import socket
+import __builtin__
+
+config_default = {
+    "param"              : None,
+    "fv_cmd"             : "/home/openflow/flowvisor/scripts/flowvisor.sh",
+    "platform"           : "local",
+    "controller_host"    : "127.0.0.1",
+    "controller_port"    : 6633,
+    "timeout"            : 3,
+    "port_count"         : 4,
+    "base_of_port"       : 1,
+    "base_if_index"      : 1,
+    "test_spec"          : "all",
+    "test_dir"           : ".",
+    "log_file"           : "/home/openflow/fvt.log",
+    "list"               : False,
+    "debug"              : "debug",
+    "dbg_level"          : logging.DEBUG,
+    "port_map"           : {},
+    "test_params"        : "None"
+}
+
+def test_set_init(config):
+    """
+    Set up function for basic test classes
+    @param config The configuration dictionary; see fvt
+    """
+    global basic_port_map
+    global basic_fv_cmd
+    global basic_logger
+    global basic_timeout
+    global basic_config
+    global baisc_logger
+
+    basic_fv_cmd = config["fv_cmd"]
+    basic_timeout = config["timeout"]
+    basic_port_map = config["port_map"]
+    basic_config = config
+
+class FvtApiDriver(API,templatetest.TemplateTest):
+
+    def __init__(self):
+        super(API, self).__init__()
+        print 'init'
+                                                
+
+    def connect(self,**connectargs):
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        
+        self.name = self.options['name']
+        connect_result = super(API,self).connect()
+        self.logFileName = main.logdir+"/"+self.name+".session"
+        config_default["log_file"] = self.logFileName
+        test_set_init(config_default)
+        __builtin__.basic_logger = vars(main)[self.name+'log']
+        __builtin__.basic_logger.info("Calling my test setup")
+        self.setUp(basic_logger)
+
+        (self.fv, self.sv, sv_ret, ctl_ret, sw_ret) = testutils.setUpTestEnv(self, fv_cmd=basic_fv_cmd)
+        
+        self.chkSetUpCondition(self.fv, sv_ret, ctl_ret, sw_ret)
+        return main.TRUE
+
+    def simplePacket(self,dl_src):
+        dl_src = vars(testutils)[dl_src]
+        return testutils.simplePacket(dl_src = dl_src)
+   
+    def genPacketIn(self, in_port, pkt):
+        return testutils.genPacketIn(in_port=in_port, pkt=pkt)
+     
+    def ofmsgSndCmp(self, snd_list, exp_list, xid_ignore=True, hdr_only=True):
+        return testutils.ofmsgSndCmp(self, snd_list, exp_list, xid_ignore, hdr_only)
+    
+    def setRule(self,sv,rule,num_try) :
+        return testutils.setRule(self,sv,rule,num_try)
+    
+    def chkFlowdb(self,controller_number,switch_number,exp_count,exp_rewrites) :
+        return testutils.chkFlowdb(self,controller_number,switch_number,exp_count,exp_rewrites)
+    
+    def chkSwitchStats(self, switch_number, ofproto, exp_snd_count, exp_rcv_count):
+        return testutils.chkSwitchStats(self, switch_number, ofproto, exp_snd_count, exp_rcv_count)
+    
+    def chkSliceStats(self,controller_number,ofproto,exp_snd_count,exp_rcv_count) :
+        return testutils.chkSliceStats(self,controller_number,ofproto,exp_snd_count,exp_rcv_count)
+    
+    def recvStats(self,swId,typ) :
+        return testutils.recvStats(self,swId,typ)
+    
+    def ofmsgSndCmpWithXid(self,snd_list,exp_list,xid_ignore,hdr_only) :
+        return testutils.ofmsgSndCmpWithXid(self,snd_list,exp_list,xid_ignore,hdr_only)
+    
+    def genPacketOut(self,xid,buffer_id,in_port,action_ports,pkt) :
+        return testutils.genPacketOut(self,xid,buffer_id,in_port,action_ports,pkt)
+    
+    def genFlowModFlush(self) :
+        return testutils.genFlowModFlush()
+    
+    def genPhyPort(self,name,addr,port_no) :
+        return testutils.genPhyPort(name,addr,port_no)
+    
+    def disconnect(self,handle):
+        response = ''
+        '''
+        if self.handle:
+            self.handle = handle
+            response = self.execute(cmd="exit",prompt="(.*)",timeout=120)
+        else :
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        '''
+        return response  
+    
+    def setUp(self,basic_logger):
+        self.logger = basic_logger
+        #basic_logger.info("** START TEST CASE " + str(self))
+        if basic_timeout == 0:
+            self.timeout = None
+        else:
+            self.timeout = basic_timeout
+        self.fv = None
+        self.sv = None
+        self.controllers = []
+        self.switches = []
+    
+    def close_log_handles(self) :
+        self.tearDown() 
+        vars(main)[self.name+'log'].removeHandler(self.log_handler)
+        #if self.logfile_handler:
+        #    self.logfile_handler.close()
+        
+        return main.TRUE
+
+    
diff --git a/TestON/drivers/common/api/onosapi/__init__.py b/TestON/drivers/common/api/onosapi/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/api/onosapi/__init__.py
diff --git a/TestON/drivers/common/api/onosrestapidriver.py b/TestON/drivers/common/api/onosrestapidriver.py
new file mode 100644
index 0000000..31a8930
--- /dev/null
+++ b/TestON/drivers/common/api/onosrestapidriver.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+'''
+Created on 4-Jun-2013
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.        
+
+
+onosrestapidriver is the basic driver which will handle the onorestapi functions
+'''
+
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import time 
+
+sys.path.append("../")
+from drivers.common.apidriver import API
+import urllib
+import __builtin__
+
+
+class OnosRestApiDriver(API):
+
+    def __init__(self):
+        super(API, self).__init__()
+                                                
+
+    def connect(self,**connectargs):
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        
+        self.name = self.options['name']
+        self.handle = super(OnosRestApiDriver,self).connect()
+        main.log.info(self.options['topology_url'])
+        try :
+            self.handle = urllib.urlopen(self.options['topology_url'])
+        except Exception,e:
+            main.log.error(e)
+            
+        self.logFileName = main.logdir+"/"+self.name+".session"
+        
+        if self.handle:
+            return self.handle
+        else :
+            return main.FALSE
+
+    def execute(self):
+        main.log.info(self.options['topology_url'])
+        response = main.FALSE
+        for i in [1,2] :
+            time.sleep(2)
+            response = self.http_request()
+        return response
+        
+    def http_request(self):
+        try :
+            self.handle = urllib.urlopen(self.options['topology_url'])
+
+            resonse_lines = self.handle.readlines()
+            print resonse_lines
+            return resonse_lines
+        except Exception,e:
+            main.log.error(e)
+            return "url error"
+   
+    def disconnect(self,handle):
+        response = ''
+        '''
+        if self.handle:
+            self.handle = handle
+            response = self.execute(cmd="exit",prompt="(.*)",timeout=120)
+        else :
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        '''
+        return response  
+    
+    
+   
+    
diff --git a/TestON/drivers/common/apidriver.py b/TestON/drivers/common/apidriver.py
new file mode 100644
index 0000000..254ab1b
--- /dev/null
+++ b/TestON/drivers/common/apidriver.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+'''
+Created on 22-Nov-2012 
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)      
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+'''
+
+import struct, fcntl, os, sys, signal
+import sys, re
+sys.path.append("../")
+
+from drivers.component import Component
+class API(Component):
+    '''
+        This will define common functions for CLI included.
+    '''
+    def __init__(self):
+        super(Component, self).__init__()
+        
+    def connect(self):
+        '''
+           Connection will establish to the remote host using ssh.
+           It will take user_name ,ip_address and password as arguments<br>
+           and will return the handle. 
+        '''
+        super(API, self).connect()
+         
+        return main.TRUE       
diff --git a/TestON/drivers/common/cli/__init__.py b/TestON/drivers/common/cli/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/cli/__init__.py
diff --git a/TestON/drivers/common/cli/cassandraclidriver.py b/TestON/drivers/common/cli/cassandraclidriver.py
new file mode 100644
index 0000000..0b43d32
--- /dev/null
+++ b/TestON/drivers/common/cli/cassandraclidriver.py
@@ -0,0 +1,138 @@
+#!/usr/bin/env python
+'''
+Created on 31-May-2013
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.        
+
+
+CassandraCliDriver is the basic driver which will handle the Cassandra functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import core.teston
+import time
+
+sys.path.append("../")
+from drivers.common.clidriver import CLI
+
+class CassandraCliDriver(CLI):
+    '''
+        CassandraCliDriver is the basic driver which will handle the Cassandra's functions
+    '''
+    def __init__(self):
+        super(CLI, self).__init__()
+        self.handle = self
+        self.wrapped = sys.modules[__name__]
+
+    def connect(self, **connectargs):
+        # Here the main is the TestON instance after creating all the log handles.
+        self.port = None
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]       
+        
+        self.name = self.options['name']
+        self.handle = super(CassandraCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+        
+        self.ssh_handle = self.handle
+        if self.handle :
+            self.start()
+            return main.TRUE
+        else :
+            main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address) 
+            main.log.error("Failed to connect to the Onos system")
+            return main.FALSE
+   
+ 
+    def start(self):
+        ''' This Function will start the Cassandra'''
+        main.log.info( "Starting Cassandra" )
+        self.handle.sendline("")
+        self.handle.expect("\$")
+        self.handle.sendline("~/ONOS/start-cassandra.sh start")
+        self.handle.expect("start-cassandra.sh start")
+        self.handle.expect("\$")
+        response = self.handle.before + self.handle.after
+        time.sleep(5)
+        if re.search("Starting\scassandra(.*)", response):
+            main.log.info("Cassandra Started ")
+            return main.TRUE
+        else:
+            main.log.error("Failed to start Cassandra"+ response)
+            return main.FALSE
+        
+    def status(self):
+        '''This Function will return the Status of the Cassandra '''
+        time.sleep(5)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        response = self.execute(cmd="~/ONOS/start-cassandra.sh status ",prompt="\d+\sinstance\sof\scassandra\srunning(.*)",timeout=10)
+        
+
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        return response
+        
+        if re.search("0\sinstance\sof\scassandra\srunning(.*)") :
+            main.log.info("Cassandra not running")
+            return main.TRUE
+        elif re.search("1\sinstance\sof\scassandra\srunning(.*)"):
+            main.log.warn("Cassandra Running")
+            return main.TRUE
+            
+    def stop(self):
+        '''This Function will stop the Cassandra if it is Running''' 
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        time.sleep(5)
+        response = self.execute(cmd="~/ONOS/start-cassandra.sh stop ",prompt="Killed\sexisting\sprosess(.*)",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        if re.search("Killed\sexisting\sprosess(.*)",response):
+            main.log.info("Cassandra Stopped")
+            return main.TRUE
+        else:
+            main.log.warn("Cassndra is not Running")
+            return main.FALSE
+            
+    def disconnect(self):
+        
+        response = ''
+        if self.handle:
+            self.handle.sendline("exit")
+            self.handle.expect("closed")
+        else :
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        return response 
+
+    def isup(self):
+        tries = 5
+        main.log.info("trying %i times" % tries )
+        for i in range(tries):
+            self.execute(cmd="\r",prompt="\$",timeout=10)
+            self.handle.sendline("")
+            self.handle.expect("\$") 
+            self.handle.sendline("~/ONOS/start-cassandra.sh status")
+            self.handle.expect("sh status") 
+            self.handle.expect("\$") 
+            result = self.handle.before + self.handle.after 
+            pattern = '(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)'
+            if re.search(pattern, result): 
+                return main.TRUE
+        return main.FALSE
diff --git a/TestON/drivers/common/cli/check_status.py b/TestON/drivers/common/cli/check_status.py
new file mode 100755
index 0000000..c725cec
--- /dev/null
+++ b/TestON/drivers/common/cli/check_status.py
@@ -0,0 +1,111 @@
+#! /usr/bin/env python
+import json
+import os
+import sys
+
+# http://localhost:8080/wm/core/topology/switches/all/json
+# http://localhost:8080/wm/core/topology/links/json
+# http://localhost:8080/wm/registry/controllers/json
+# http://localhost:8080/wm/registry/switches/json"
+
+def get_json(url):
+  try:
+    command = "curl -s %s" % (url)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)
+  except:
+    print "REST IF %s has issue" % command
+    parsedResult = ""
+
+  if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
+    print "REST %s returned code %s" % (command, parsedResult['code'])
+    parsedResult = ""
+
+  return parsedResult 
+
+def check_switch(RestIP,correct_nr_switch ):
+  buf = ""
+  retcode = 0
+  RestPort="8080"
+
+  url="http://%s:%s/wm/core/topology/switches/all/json" % (RestIP, RestPort)
+  parsedResult = get_json(url)
+
+  if parsedResult == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+  url = "http://%s:%s/wm/registry/switches/json" % (RestIP, RestPort)
+  registry = get_json(url)
+
+  if registry == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+
+  buf += "switch: total %d switches\n" % len(parsedResult)
+  cnt = 0
+  active = 0
+
+  for s in parsedResult:
+    cnt += 1
+
+    if s['state']  == "ACTIVE":
+      active += 1
+
+    if not s['dpid'] in registry:
+      buf += "switch:  dpid %s lost controller\n" % (s['dpid'])
+
+  buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
+  if correct_nr_switch != cnt:
+    buf += "switch fail: network %d should have %d switches but has %d\n" % (1, correct_nr_switch, cnt)
+    retcode = 1
+
+  if correct_nr_switch != active:
+    buf += "switch fail: network %d should have %d active switches but has %d\n" % (1, correct_nr_switch, active)
+    retcode = 1
+
+  return (retcode, buf)
+
+def check_link(RestIP, nr_links):
+  RestPort = "8080"
+  buf = ""
+  retcode = 0
+
+  url = "http://%s:%s/wm/core/topology/links/json" % (RestIP, RestPort)
+  parsedResult = get_json(url)
+
+  if parsedResult == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+  buf += "link: total %d links (correct : %d)\n" % (len(parsedResult), nr_links)
+  intra = 0
+  interlink=0
+
+  for s in parsedResult:
+    intra = intra + 1 
+
+  if intra != nr_links:
+    buf += "link fail: network %d should have %d intra links but has %d\n" % (1, nr_links, intra)
+    retcode = 1
+
+  return (retcode, buf)
+
+#if __name__ == "__main__":
+def check_status(ip, numoswitch, numolink):
+
+  switch = check_switch(ip, numoswitch)
+  link = check_link(ip, numolink)
+  value = switch[0]
+  value += link[0]
+  if value != 0:
+    print "FAIL"
+    return 0
+  else: 
+    print "PASS"
+    return 1
+  print "%s" % switch[1]
+  print "%s" % link[1]
+ # print "%s" % check_switch_local()[1]
+ # print "%s" % check_controllers(8)[1]
diff --git a/TestON/drivers/common/cli/emulator/__init__.py b/TestON/drivers/common/cli/emulator/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/cli/emulator/__init__.py
diff --git a/TestON/drivers/common/cli/emulator/flowvisordriver.py b/TestON/drivers/common/cli/emulator/flowvisordriver.py
new file mode 100644
index 0000000..8df7338
--- /dev/null
+++ b/TestON/drivers/common/cli/emulator/flowvisordriver.py
@@ -0,0 +1,179 @@
+#!/usr/bin/env python
+'''
+Created on 26-Mar-2013
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+FlowVisorDriver is the basic driver which will handle the Mininet functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import core.teston
+sys.path.append("../")
+from drivers.common.cli.emulatordriver import Emulator
+from drivers.common.clidriver import CLI
+
+class FlowVisorDriver(Emulator):
+    '''
+        FlowVisorDriver is the basic driver which will handle the Mininet functions
+    '''
+    def __init__(self):
+        super(Emulator, self).__init__()
+        self.handle = self
+        self.wrapped = sys.modules[__name__]
+
+    def connect(self, **connectargs):
+        #,user_name, ip_address, pwd,options):
+        # Here the main is the TestON instance after creating all the log handles.
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]       
+        
+        self.name = self.options['name']
+        self.handle = super(FlowVisorDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = None, pwd = self.pwd)
+        
+        self.ssh_handle = self.handle
+        
+        # Copying the readme file to process the 
+        if self.handle :
+            self.execute(cmd='\r',prompt='\$',timeout=10)
+            self.options['path'] = '/home/openflow/flowvisor/scripts/'
+            #self.handle.logfile = sys.stdout
+            self.execute(cmd='cd '+self.options['path'],prompt='\$',timeout=10)
+            main.log.info("Starting FlowVisor ")
+            
+            response = self.execute(cmd='./flowvisor.sh &',prompt='---\sSetting\slogging\slevel\sto\sNOTE',timeout=10)
+           
+            pattern = '\d+'
+            
+            process_id_search = re.search("\[\d+\]\s+(\d+)", str(response))
+            self.fvprocess_id = "None"
+            if process_id_search:
+                self.fvprocess_id = process_id_search.group(1)
+            
+            utilities.assert_matches(expect=pattern,actual=response,onpass="FlowVisor Started Successfully : Proceess Id :"+self.fvprocess_id,onfail="Failed to start FlowVisor")
+            main.log.info(response)
+            #import time
+            #time.sleep(10)
+            #response = self.execute(cmd='./start_visualizer.sh & \r',prompt='\$',timeout=10)
+            
+            return main.TRUE
+        else :
+            main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address) 
+            main.log.error("Failed to connect to the FlowVisor")
+            return main.FALSE
+    def removeFlowSpace(self,id):
+        if id == "all":
+            flow_space = self.listFlowSpace()
+            flow_ids = re.findall("\,id=\[(\d+)\]", flow_space)
+            for id in flow_ids :
+                self.removeFlowSpace(id)
+        else :
+            self.execute(cmd="clear",prompt="\$",timeout=10)
+            self.execute(cmd="./fvctl.sh removeFlowSpace "+id,prompt="passwd:",timeout=10)
+            self.execute(cmd="\r",prompt="\$",timeout=10)
+            main.log.info("Removed flowSpace which is having id :"+id)
+            
+        return main.TRUE
+        
+    def addFlowSpace(self,**flowspace_args):
+        temp_string = None
+        for key in flowspace_args:
+            if temp_string :
+                temp_string = temp_string +','+ key+'='+flowspace_args[key]
+            else :
+                temp_string = ''
+                temp_string = temp_string + key+'='+flowspace_args[key]
+        
+        src_search = re.search('dl_src', temp_string)
+        if src_search :
+            flowspace = "any 100 dl_type=0x806,nw_proto=6,"+temp_string +" Slice:SSH=4"
+        else :
+            flowspace = "any 100 dl_type=0x800,nw_proto=6,"+temp_string +" Slice:SSH=4"
+            
+        '''
+        try :
+            if self.dl_src and self.nw_dst:
+                flowspace = "any 100 dl_type=0x806,dl_src="+self.dl_src+",nw_dst="+self.nw_dst+" Slice:"+self.Slice+"=4"
+        except :
+            try :
+                if self.nw_src and self.tp_dst:
+                    flowspace = "any 100 dl_type=0x800,nw_proto=6,nw_src="+self.nw_src+",tp_dst="+self.tp_dst+" Slice:"+self.Slice+"=4"         
+            except :
+                try :
+                    if self.nw_src and self.tp_src:
+                        flowspace = "any 100 dl_type=0x800,nw_proto=6,nw_src="+self.nw_src+",tp_src="+self.tp_dst+" Slice:"+self.Slice+"=4"
+                except :
+                    main.log.error("Please specify flowspace properly")
+        '''    
+
+        #self.execute(cmd="clear",prompt="\$",timeout=10)
+        self.execute(cmd="./fvctl.sh addFlowSpace "+flowspace,prompt="passwd:",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        sucess_match = re.search("success\:\s+(\d+)", main.last_response)
+        if sucess_match :
+            main.log.info("Added flow Space and id is "+sucess_match.group(1))
+            return main.TRUE
+        else :
+            return main.FALSE
+        
+    
+    
+    def listFlowSpace(self):
+        self.execute(cmd="clear",prompt="\$",timeout=10)
+        self.execute(cmd="./fvctl.sh listFlowSpace ",prompt="passwd:",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        flow_space = main.last_response
+        flow_space = self.remove_contol_chars( flow_space)
+        flow_space = re.sub("rule\s(\d+)\:", "\nrule "+r'\1'+":",flow_space)
+        main.log.info(flow_space)
+        
+        return flow_space
+        
+    def listDevices(self):
+        #self.execute(cmd="clear",prompt="\$",timeout=10)
+        #self.execute(cmd="./fvctl.sh listDevices ",prompt="passwd:",timeout=10)
+        #self.execute(cmd="\r",prompt="\$",timeout=10)
+        devices_list = ''
+        last_response = re.findall("(Device\s\d+\:\s((\d|[a-z])(\d|[a-z])\:)+(\d|[a-z])(\d|[a-z]))", main.last_response)
+        
+        for resp in last_response :
+            devices_match = re.search("(Device\s\d+\:\s((\d|[a-z])(\d|[a-z])\:)+(\d|[a-z])(\d|[a-z]))", str(resp))
+            if devices_match:
+                devices_list = devices_list+devices_match.group(0)+"\n"
+        devices_list = "Device 0: 00:00:00:00:00:00:00:02 \n Device 1: 00:00:00:00:00:00:00:03"
+        main.log.info("List of Devices \n"+devices_list)
+        
+        return main.TRUE
+    
+ 
+    def disconnect(self):
+        
+        response = ''
+        main.log.info("Stopping the FlowVisor")
+        if self.handle:
+            self.handle.sendline("kill -9 "+str(self.fvprocess_id))
+        else :
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        return response 
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
new file mode 100644
index 0000000..aa02ed1
--- /dev/null
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -0,0 +1,354 @@
+#!/usr/bin/env python
+'''
+Created on 26-Oct-2012
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+MininetCliDriver is the basic driver which will handle the Mininet functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import core.teston
+sys.path.append("../")
+from drivers.common.cli.emulatordriver import Emulator
+from drivers.common.clidriver import CLI
+
+class MininetCliDriver(Emulator):
+    '''
+        MininetCliDriver is the basic driver which will handle the Mininet functions
+    '''
+    def __init__(self):
+        super(Emulator, self).__init__()
+        self.handle = self
+        self.wrapped = sys.modules[__name__]
+        self.flag = 0
+
+    def connect(self, **connectargs):
+        #,user_name, ip_address, pwd,options):
+        # Here the main is the TestON instance after creating all the log handles.
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]       
+        
+        self.name = self.options['name']
+        self.handle = super(MininetCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = None, pwd = self.pwd)
+        
+        self.ssh_handle = self.handle
+        
+        # Copying the readme file to process the 
+        if self.handle :
+            #self.handle.logfile = sys.stdout
+            main.log.info("Clearing any residual state or processes")
+            self.handle.sendline("sudo mn -c")
+
+            i=self.handle.expect(['password\sfor\sadmin','Cleanup\scomplete',pexpect.EOF,pexpect.TIMEOUT],60)
+            if i==0:
+                main.log.info("sending sudo password")
+                self.handle.sendline('onos_test')
+                i=self.handle.expect(['admin:','\$',pexpect.EOF,pexpect.TIMEOUT],60)
+            if i==1:
+                main.log.info("Clean")
+
+            elif i==2:
+                main.log.error("Connection timeout")
+            elif i==3: #timeout
+                main.log.error("Something while cleaning MN took too long... " )
+ 
+            #cmdString = "sudo mn --topo "+self.options['topo']+","+self.options['topocount']+" --mac --switch "+self.options['switch']+" --controller "+self.options['controller']
+            #cmdString = "sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --controller remote --ip 192.168.56.102 --port 6633 --topo mytopo"
+            main.log.info("building fresh mininet") 
+            cmdString = "sudo mn " + self.options['arg1'] + " " + self.options['arg2'] +  " --arp --mac --controller " + self.options['controller']
+            #resultCommand = self.execute(cmd=cmdString,prompt='mininet>',timeout=120)
+            self.handle.sendline(cmdString)
+            self.handle.expect("sudo mn")
+            while 1: 
+                i=self.handle.expect(['mininet>','\*\*\*','Exception',pexpect.EOF,pexpect.TIMEOUT],300)
+                if i==0:
+                    main.log.info("mininet built") 
+                    return main.TRUE
+                if i==1:
+                    self.handle.expect("\n")
+                    main.log.info(self.handle.before)
+                elif i==2:
+                    main.log.error("Launching mininet failed...")
+                    return main.FALSE
+                elif i==3:
+                    main.log.error("Connection timeout")
+                    return main.FALSE
+                elif i==4: #timeout
+                    main.log.error("Something took too long... " )
+                    return main.FALSE
+
+            #if utilities.assert_matches(expect=patterns,actual=resultCommand,onpass="Network is being launched",onfail="Network launching is being failed "):
+            return main.TRUE
+            #else:
+            #    return main.FALSE
+
+        else :
+            main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address) 
+            main.log.error("Failed to connect to the Mininet")
+            return main.FALSE
+                       
+    def pingall(self):
+        '''
+           Verifies the reachability of the hosts using pingall command.
+        '''
+        if self.handle :
+            main.log.info("Checking reachabilty to the hosts using pingall")
+            response = self.execute(cmd="pingall",prompt="mininet>",timeout=10)
+            pattern = 'Results\:\s0\%\sdropped\s\(0\/\d+\slost\)\s*$'
+            if utilities.assert_matches(expect=pattern,actual=response,onpass="All hosts are reaching",onfail="Unable to reach all the hosts"):
+                return main.TRUE
+            else:
+                return main.FALSE
+        else :
+            main.log.error("Connection failed to the host") 
+            return main.FALSE
+        
+    def pingHost(self,**pingParams):
+        
+        args = utilities.parse_args(["SRC","TARGET"],**pingParams)
+        #command = args["SRC"] + " ping -" + args["CONTROLLER"] + " " +args ["TARGET"]
+        command = args["SRC"] + " ping "+args ["TARGET"]+" -c 2 -i .2"
+        response = self.execute(cmd=command,prompt="mininet",timeout=10 )
+        if utilities.assert_matches(expect=',\s0\%\spacket\sloss',actual=response,onpass="No Packet loss",onfail="Host is not reachable"):
+            main.log.info("NO PACKET LOSS, HOST IS REACHABLE")
+            main.last_result = main.TRUE 
+            return main.TRUE
+        else :
+            main.log.error("PACKET LOST, HOST IS NOT REACHABLE")
+            main.last_result = main.FALSE
+            return main.FALSE
+        
+    
+    def checkIP(self,host):
+        '''
+            Verifies the host's ip configured or not.
+        '''
+        if self.handle :
+            response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
+
+            pattern = "inet\s(addr|Mask):([0-1]{1}[0-9]{1,2}|2[0-4][0-9]|25[0-5]|[0-9]{1,2}).([0-1]{1}[0-9]{1,2}|2[0-4][0-9]|25[0-5]|[0-9]{1,2}).([0-1]{1}[0-9]{1,2}|2[0-4][0-9]|25[0-5]|[0-9]{1,2}).([0-1]{1}[0-9]{1,2}|2[0-4][0-9]|25[0-5]|[0-9]{1,2})"
+            #pattern = "inet\saddr:10.0.0.6"  
+            if utilities.assert_matches(expect=pattern,actual=response,onpass="Host Ip configured properly",onfail="Host IP not found") :
+                return main.TRUE
+            else:
+                return main.FALSE
+        else :
+            main.log.error("Connection failed to the host") 
+            
+    def verifySSH(self,**connectargs):
+        response = self.execute(cmd="h1 /usr/sbin/sshd -D&",prompt="mininet>",timeout=10)
+        response = self.execute(cmd="h4 /usr/sbin/sshd -D&",prompt="mininet>",timeout=10)
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        response = self.execute(cmd="xterm h1 h4 ",prompt="mininet>",timeout=10)
+        import time
+        time.sleep(20)
+        if self.flag == 0:
+            self.flag = 1
+            return main.FALSE
+        else :
+            return main.TRUE
+    
+    def getMacAddress(self,host):
+        '''
+            Verifies the host's ip configured or not.
+        '''
+        if self.handle :
+            response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
+
+            pattern = "HWaddr\s(((\d|\w)+:)+(\d|\w))"
+            mac_address_search = re.search(pattern, response)
+            main.log.info("Mac-Address of Host "+host +" is "+mac_address_search.group(1))
+            return mac_address_search.group(1)
+        else :
+            main.log.error("Connection failed to the host") 
+    def getIPAddress(self,host):
+        '''
+            Verifies the host's ip configured or not.
+        '''
+        if self.handle :
+            response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
+
+            pattern = "inet\saddr:(\d+\.\d+\.\d+\.\d+)"
+            ip_address_search = re.search(pattern, response)
+            main.log.info("IP-Address of Host "+host +" is "+ip_address_search.group(1))
+            return ip_address_search.group(1)
+        else :
+            main.log.error("Connection failed to the host") 
+        
+    def dump(self):
+        main.log.info("Dump node info")
+        self.execute(cmd = 'dump',prompt = 'mininet>',timeout = 10)
+        return main.TRUE
+            
+    def intfs(self):
+        main.log.info("List interfaces")
+        self.execute(cmd = 'intfs',prompt = 'mininet>',timeout = 10)
+        return main.TRUE
+    
+    def net(self):
+        main.log.info("List network connections")
+        self.execute(cmd = 'net',prompt = 'mininet>',timeout = 10)
+        return main.TRUE
+    
+    def iperf(self):
+        main.log.info("Simple iperf TCP test between two (optionally specified) hosts")
+        self.execute(cmd = 'iperf',prompt = 'mininet>',timeout = 10)
+        return main.TRUE
+    
+    def iperfudp(self):
+        main.log.info("Simple iperf TCP test between two (optionally specified) hosts")
+        self.execute(cmd = 'iperfudp',prompt = 'mininet>',timeout = 10)
+        return main.TRUE
+    
+    def nodes(self):
+        main.log.info("List all nodes.")
+        self.execute(cmd = 'nodes',prompt = 'mininet>',timeout = 10)    
+        return main.TRUE
+    
+    def pingpair(self):
+        main.log.infoe("Ping between first two hosts")
+        self.execute(cmd = 'pingpair',prompt = 'mininet>',timeout = 20)
+        
+        if utilities.assert_matches(expect='0% packet loss',actual=response,onpass="No Packet loss",onfail="Hosts not reachable"):
+            main.log.info("Ping between two hosts SUCCESS")
+            main.last_result = main.TRUE 
+            return main.TRUE
+        else :
+            main.log.error("PACKET LOST, HOSTS NOT REACHABLE")
+            main.last_result = main.FALSE
+            return main.FALSE
+    
+    def link(self,**linkargs):
+        '''
+        Bring link(s) between two nodes up or down
+        '''
+        main.log.info('Bring link(s) between two nodes up or down')
+        args = utilities.parse_args(["END1","END2","OPTION"],**linkargs)
+        end1 = args["END1"] if args["END1"] != None else ""
+        end2 = args["END2"] if args["END2"] != None else ""
+        option = args["OPTION"] if args["OPTION"] != None else ""
+        command = "link "+str(end1) + " " + str(end2)+ " " + str(option)
+        response = self.execute(cmd=command,prompt="mininet>",timeout=10)
+        return main.TRUE
+        
+
+    def dpctl(self,**dpctlargs):
+        '''
+         Run dpctl command on all switches.
+        '''
+        main.log.info('Run dpctl command on all switches')
+        args = utilities.parse_args(["CMD","ARGS"],**dpctlargs)
+        cmd = args["CMD"] if args["CMD"] != None else ""
+        cmdargs = args["ARGS"] if args["ARGS"] != None else ""
+        command = "dpctl "+cmd + " " + str(cmdargs)
+        response = self.execute(cmd=command,prompt="mininet>",timeout=10)
+        return main.TRUE
+   
+        
+    def get_version(self):
+        file_input = path+'/lib/Mininet/INSTALL'
+        version = super(Mininet, self).get_version()
+        pattern = 'Mininet\s\w\.\w\.\w\w*'
+        for line in open(file_input,'r').readlines():
+            result = re.match(pattern, line)
+            if result:
+                version = result.group(0)
+        return version 
+
+    def get_sw_controller(self,sw):
+        command = "sh ovs-vsctl get-controller "+str(sw)
+        main.log.info(self.execute(cmd=command,prompt="mininet>",timeout=10))
+
+    def assign_sw_controller(self,**kwargs):
+        args = utilities.parse_args(["SW","IP1","PORT1","IP2","PORT2","IP3","PORT3","IP4","PORT4","IP5","PORT5","IP6","PORT6","IP7","PORT7","IP8","PORT8"],**kwargs)
+        sw = args["SW"] if args["SW"] != None else ""
+        ip1 = args["IP1"] if args["IP1"] != None else ""
+        ip2 = args["IP2"] if args["IP2"] != None else ""
+        ip3 = args["IP3"] if args["IP3"] != None else ""
+        ip4 = args["IP4"] if args["IP4"] != None else ""
+        ip5 = args["IP5"] if args["IP5"] != None else ""
+        ip6 = args["IP6"] if args["IP6"] != None else ""
+        ip7 = args["IP7"] if args["IP7"] != None else ""
+        ip8 = args["IP8"] if args["IP8"] != None else ""
+       # master = args["MASTER"] if args["MASTER"] != None else ""
+        port1 = args["PORT1"] if args["PORT1"] != None else ""
+        port2 = args["PORT2"] if args["PORT2"] != None else ""
+        port3 = args["PORT3"] if args["PORT3"] != None else ""
+        port4 = args["PORT4"] if args["PORT4"] != None else ""
+        port5 = args["PORT5"] if args["PORT5"] != None else ""
+        port6 = args["PORT6"] if args["PORT6"] != None else ""
+        port7 = args["PORT7"] if args["PORT7"] != None else ""
+        port8 = args["PORT8"] if args["PORT8"] != None else ""
+        tcp1 = "tcp:"+str(ip1)+":"+str(port1) if ip1 != "" else ""
+        tcp2 = "tcp:"+str(ip2)+":"+str(port2) if ip2 != "" else ""
+        tcp3 = "tcp:"+str(ip3)+":"+str(port3) if ip3 != "" else ""
+        tcp4 = "tcp:"+str(ip4)+":"+str(port4) if ip4 != "" else ""
+        tcp5 = "tcp:"+str(ip5)+":"+str(port5) if ip5 != "" else ""
+        tcp6 = "tcp:"+str(ip6)+":"+str(port6) if ip6 != "" else ""
+        tcp7 = "tcp:"+str(ip7)+":"+str(port7) if ip7 != "" else ""
+        tcp8 = "tcp:"+str(ip8)+":"+str(port8) if ip8 != "" else ""
+       # master1 = tcp1+" role master " if args["MASTER"] == 1 else ""
+       # master2 = tcp2+" role master " if args["MASTER"] == 2 else ""
+       # master3 = tcp3+" role master " if args["MASTER"] == 3 else ""
+       # master4 = tcp4+" role master " if args["MASTER"] == 4 else ""
+        command = "sh ovs-vsctl set-controller "+str(sw)+" "+tcp1+" "+tcp2+" "+tcp3+" "+tcp4+" "+tcp5+" "+tcp6+" "+tcp7+" "+tcp8
+        self.execute(cmd=command,prompt="mininet>",timeout=5)
+
+    def disconnect(self):
+        main.log.info("Disconnecting mininet...")
+        response = ''
+        if self.handle:
+            response = self.execute(cmd="exit",prompt="(.*)",timeout=120)
+            response = self.execute(cmd="exit",prompt="(.*)",timeout=120)
+
+        else :
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        return response  
+
+    def ctrl_none(self):
+        #self.execute(cmd="sh ~/ONOS/scripts/test-ctrl-none.sh", prompt="mininet",timeout=20)
+        self.handle.sendline()
+        self.handle.expect("mininet>")
+        self.handle.sendline("sh ~/ONOS/scripts/test-ctrl-none.sh")
+        self.handle.expect("test-ctrl-none")
+        self.handle.expect("mininet>", 20)
+
+    def ctrl_all(self):
+        self.execute(cmd="sh ~/ONOS/scripts/test-ctrl-add-ext.sh", prompt="mininet",timeout=20)
+  
+    def ctrl_divide(self):
+        self.execute(cmd="sh ~/ONOS/scripts/ctrl-divide.sh ", prompt="mininet",timeout=20)
+
+    def ctrl_local(self):
+        self.execute(cmd="sh ~/ONOS/scripts/test-ctrl-local.sh ", prompt="mininet",timeout=20)
+
+    def ctrl_one(self, ip):
+        self.execute(cmd="sh ~/ONOS/scripts/ctrl-one.sh "+ip, prompt="mininet",timeout=20)
+
+if __name__ != "__main__":
+    import sys
+    sys.modules[__name__] = MininetCliDriver()
diff --git a/TestON/drivers/common/cli/emulator/poxclidriver.py b/TestON/drivers/common/cli/emulator/poxclidriver.py
new file mode 100644
index 0000000..a562274
--- /dev/null
+++ b/TestON/drivers/common/cli/emulator/poxclidriver.py
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+'''
+Created on 26-Oct-2012
+       
+@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+pox driver provides the basic functions of POX controller
+'''
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys
+from drivers.common.cli.emulatordriver import Emulator
+
+class PoxCliDriver(Emulator):
+    '''
+        PoxCliDriver driver provides the basic functions of POX controller
+    '''
+    def __init__(self):
+        super(Emulator, self).__init__()
+        self.handle = self
+        self.wrapped = sys.modules[__name__]
+
+    def connect(self, **connectargs):
+        #,user_name, ip_address, pwd,options):
+        '''
+          this subroutine is to launch pox controller . It must have arguments as : 
+          user_name  = host name ,
+          ip_address = ip address of the host ,
+          pwd = password of host ,
+          options = it is a topology hash which will consists the component's details for the test run
+
+          *** host is here a virtual mahine or system where pox framework hierarchy exists
+        '''
+        
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]       
+        
+        self.name = self.options['name']
+        
+        poxLibPath = 'default'
+        copy = super(PoxCliDriver, self).secureCopy(self.user_name, self.ip_address,'/home/openflow/pox/pox/core.py', self.pwd,path+'/lib/pox/')
+        self.handle = super(PoxCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = None, pwd = self.pwd)
+        
+        if self.handle:
+            self.handle.expect("openflow")
+            command = self.getcmd(self.options)
+            #print command       
+            main.log.info("Entering into POX hierarchy")
+            if self.options['pox_lib_location'] != 'default':
+                self.execute(cmd="cd "+self.options['pox_lib_location'],prompt="/pox\$",timeout=120)
+            else:    
+                self.execute(cmd="cd ~/TestON/lib/pox/",prompt="/pox\$",timeout=120)
+            ### launching pox with components    
+            main.log.info("launching POX controller with given components")
+            self.execute(cmd=command,prompt="DEBUG:",timeout=120)
+            return main.TRUE
+        else :
+            main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address)
+            main.log.error("Failed to connect to the POX controller")
+            return main.FALSE
+    
+        
+    def disconnect(self,handle):
+        if self.handle:
+            self.execute(cmd="exit()",prompt="/pox\$",timeout=120)
+        else :
+            main.log.error("Connection failed to the host") 
+
+
+    def get_version(self):
+        file_input = path+'/lib/pox/core.py'
+        version = super(PoxCliDriver, self).get_version()
+        pattern = '\s*self\.version(.*)'
+        import re
+        for line in open(file_input,'r').readlines():
+            result = re.match(pattern, line)
+            if result:
+                version = result.group(0)
+                version = re.sub("\s*self\.version\s*=\s*|\(|\)",'',version)
+                version = re.sub(",",'.',version)
+                version = "POX "+version
+            
+            
+        return version
+            
+
+    def getcmd(self,options):
+        command = "./pox.py " 
+        for item in options.keys():
+            if isinstance(options[item],dict):
+                command = command + item
+                for items in options[item].keys():
+                    if options[item][items] == "None":
+                        command = command + " --" + items + " "
+                    else :
+                        command = command + " --" + items + "=" + options[item][items] + " "
+            else:
+                if item == 'pox_lib_location':
+                    poxLibPath = options[item]
+                elif item == 'type' or item == 'name':
+                    pass
+                else :
+                    command = command + item
+
+
+        return command 
+            
+
+if __name__ != "__main__":
+    import sys
+
+    sys.modules[__name__] = PoxCliDriver()    
diff --git a/TestON/drivers/common/cli/emulator/remotemininetdriver.py b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
new file mode 100644
index 0000000..b55a371
--- /dev/null
+++ b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
@@ -0,0 +1,312 @@
+#!/usr/bin/env python
+'''
+Created on 26-Oct-2012
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+MininetCliDriver is the basic driver which will handle the Mininet functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import core.teston
+sys.path.append("../")
+from drivers.common.cli.emulatordriver import Emulator
+from drivers.common.clidriver import CLI
+from time import time
+
+class RemoteMininetDriver(Emulator):
+    '''
+        MininetCliDriver is the basic driver which will handle the Mininet functions
+    '''
+    def __init__(self):
+        super(Emulator, self).__init__()
+        self.handle = self
+        self.wrapped = sys.modules[__name__]
+        self.flag = 0
+
+    def connect(self, **connectargs):
+        #,user_name, ip_address, pwd,options):
+        # Here the main is the TestON instance after creating all the log handles.
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]       
+        
+        self.name = self.options['name']
+        self.handle = super(RemoteMininetDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = None, pwd = self.pwd)
+        
+        self.ssh_handle = self.handle
+        
+        # Copying the readme file to process the 
+        if self.handle :
+            return main.TRUE
+
+        else :
+            main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address) 
+            main.log.error("Failed to connect to the Mininet")
+            return main.FALSE
+  
+    def pingLong(self,**pingParams):
+        args = utilities.parse_args(["SRC","TARGET"],**pingParams)
+        command = "mininet/util/m " + args["SRC"] + " ping "+args ["TARGET"]+" -i .1 -D -W 1 > /tmp/ping." + args["SRC"] + " &"
+        main.log.info( command ) 
+        self.execute(cmd=command,prompt="(.*)",timeout=10)
+        return main.TRUE
+
+    def pingstatus(self,**pingParams):
+        #self.handle.sendline("pgrep ping")
+        #self.handle.expect("pgrep")
+        #self.handle.expect("\$")
+        #result = self.handle.before + self.handle.after
+        #if re.search('\d\d+', result ):
+        #    return main.TRUE
+        #else: 
+        #    return main.FALSE
+         
+        args = utilities.parse_args(["SRC"],**pingParams)
+        self.handle.sendline("tail /tmp/ping." + args["SRC"])
+        self.handle.expect("tail")
+        self.handle.expect("\$")
+        result = self.handle.before + self.handle.after
+        if re.search('Unreachable', result ):
+            main.log.info("Unreachable found in ping logs...") 
+            return main.FALSE
+        elif re.search('64\sbytes', result): 
+            main.log.info("Pings look good") 
+            return main.TRUE
+        else: 
+            main.log.info("No, or faulty ping data...") 
+            return main.FALSE
+         
+    def pingKill(self):
+        command = "sudo pkill ping" 
+        main.log.info( command ) 
+        self.execute(cmd=command,prompt="(.*)",timeout=10)
+        #command = "sudo pgrep ping" 
+        #result1 = self.execute(cmd="\r",prompt="\$",timout=10)
+        #result = self.execute(cmd=command,prompt=self.user_name,timout=10)
+        #if utilities.assert_matches(expect='[^\s]+',actual=result,onpass="match",onfail="no match"):
+        #    main.log.info( "pings running as process"  )
+        #    main.log.info( result )
+        #    return main.FALSE
+        main.log.info( "Removing old ping data" )
+        command = "rm /tmp/ping.*"
+        os.popen(command) 
+        import time
+        time.sleep(2)      
+        main.log.info( "Transferring ping files to TestStation" )
+        command = "scp /tmp/ping.* admin@10.128.7.7:/tmp/" 
+        self.execute(cmd=command,prompt="100%",timeout=20)
+        return main.TRUE
+        
+    def pingHost(self,**pingParams):
+        
+        args = utilities.parse_args(["SRC","TARGET"],**pingParams)
+        command = "mininet/util/m " + args["SRC"] + " ping "+args ["TARGET"]+" -c 4 -W 1 -i .2"
+        main.log.info ( command ) 
+        response = self.execute(cmd=command,prompt="rtt",timeout=10 )
+        if utilities.assert_matches(expect=',\s0\%\spacket\sloss',actual=response,onpass="No Packet loss",onfail="Host is not reachable"):
+            main.log.info("NO PACKET LOSS, HOST IS REACHABLE")
+            main.last_result = main.TRUE 
+            return main.TRUE
+        else :
+            main.log.error("PACKET LOST, HOST IS NOT REACHABLE")
+            main.last_result = main.FALSE
+            return main.FALSE
+        
+    
+    def checknum(self,num):
+        '''
+            Verifies the correct number of switches are running 
+        '''
+        if self.handle :
+            self.handle.sendline("")
+            self.handle.expect("\$")
+            self.handle.sendline('ifconfig -a | grep "sw.. " | wc -l')
+            self.handle.expect("wc")
+            self.handle.expect("\$")
+            response = self.handle.before
+            self.handle.sendline('ps -ef | grep "bash -ms mininet:sw" | grep -v color | wc -l') 
+            self.handle.expect("color")
+            self.handle.expect("\$")
+            response2 = self.handle.before
+
+            if re.search(num, response):
+                if re.search(num, response2):
+                    return main.TRUE
+                else:
+                    return main.FALSE
+            else:
+                return main.FALSE
+        else :
+            main.log.error("Connection failed to the host") 
+
+    def ctrl_none(self):
+        self.execute(cmd="~/ONOS/scripts/test-ctrl-none.sh", prompt="\$",timeout=10)
+
+    def ctrl_one(self, ip):
+        self.execute(cmd="~/ONOS/scripts/test-ctrl-one.sh "+ip, prompt="\$",timeout=10)
+ 
+    def ctrl_local(self):
+        self.execute(cmd="~/ONOS/scripts/test-ctrl-local.sh ", prompt="\$",timeout=10)
+
+ #   def verifySSH(self,**connectargs):
+ #       response = self.execute(cmd="h1 /usr/sbin/sshd -D&",prompt="mininet>",timeout=10)
+ #       response = self.execute(cmd="h4 /usr/sbin/sshd -D&",prompt="mininet>",timeout=10)
+ #       for key in connectargs:
+ #           vars(self)[key] = connectargs[key]
+ #       response = self.execute(cmd="xterm h1 h4 ",prompt="mininet>",timeout=10)
+ #       import time
+ #       time.sleep(20)
+ #       if self.flag == 0:
+ #           self.flag = 1
+ #           return main.FALSE
+ #       else :
+ #           return main.TRUE
+ #   
+ #   def getMacAddress(self,host):
+ #       '''
+ #           Verifies the host's ip configured or not.
+ #       '''
+ #       if self.handle :
+ #           response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
+
+ #           pattern = "HWaddr\s(((\d|\w)+:)+(\d|\w))"
+ #           mac_address_search = re.search(pattern, response)
+ #           main.log.info("Mac-Address of Host "+host +" is "+mac_address_search.group(1))
+ #           return mac_address_search.group(1)
+ #       else :
+ #           main.log.error("Connection failed to the host") 
+ #   def getIPAddress(self,host):
+ #       '''
+ #           Verifies the host's ip configured or not.
+ #       '''
+ #       if self.handle :
+ #           response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
+
+ #           pattern = "inet\saddr:(\d+\.\d+\.\d+\.\d+)"
+ #           ip_address_search = re.search(pattern, response)
+ #           main.log.info("IP-Address of Host "+host +" is "+ip_address_search.group(1))
+ #           return ip_address_search.group(1)
+ #       else :
+ #           main.log.error("Connection failed to the host") 
+ #       
+ #   def dump(self):
+ #       main.log.info("Dump node info")
+ #       self.execute(cmd = 'dump',prompt = 'mininet>',timeout = 10)
+ #       return main.TRUE
+ #           
+ #   def intfs(self):
+ #       main.log.info("List interfaces")
+ #       self.execute(cmd = 'intfs',prompt = 'mininet>',timeout = 10)
+ #       return main.TRUE
+ #   
+ #   def net(self):
+ #       main.log.info("List network connections")
+ #       self.execute(cmd = 'net',prompt = 'mininet>',timeout = 10)
+ #       return main.TRUE
+ #   
+ #   def iperf(self):
+ #       main.log.info("Simple iperf TCP test between two (optionally specified) hosts")
+ #       self.execute(cmd = 'iperf',prompt = 'mininet>',timeout = 10)
+ #       return main.TRUE
+ #   
+ #   def iperfudp(self):
+ #       main.log.info("Simple iperf TCP test between two (optionally specified) hosts")
+ #       self.execute(cmd = 'iperfudp',prompt = 'mininet>',timeout = 10)
+ #       return main.TRUE
+ #   
+ #   def nodes(self):
+ #       main.log.info("List all nodes.")
+ #       self.execute(cmd = 'nodes',prompt = 'mininet>',timeout = 10)    
+ #       return main.TRUE
+ #   
+ #   def pingpair(self):
+ #       main.log.infoe("Ping between first two hosts")
+ #       self.execute(cmd = 'pingpair',prompt = 'mininet>',timeout = 20)
+ #       
+ #       if utilities.assert_matches(expect='0% packet loss',actual=response,onpass="No Packet loss",onfail="Hosts not reachable"):
+ #           main.log.info("Ping between two hosts SUCCESS")
+ #           main.last_result = main.TRUE 
+ #           return main.TRUE
+ #       else :
+ #           main.log.error("PACKET LOST, HOSTS NOT REACHABLE")
+ #           main.last_result = main.FALSE
+ #           return main.FALSE
+ #   
+ #   def link(self,**linkargs):
+ #       '''
+ #       Bring link(s) between two nodes up or down
+ #       '''
+ #       main.log.info('Bring link(s) between two nodes up or down')
+ #       args = utilities.parse_args(["END1","END2","OPTION"],**linkargs)
+ #       end1 = args["END1"] if args["END1"] != None else ""
+ #       end2 = args["END2"] if args["END2"] != None else ""
+ #       option = args["OPTION"] if args["OPTION"] != None else ""
+ #       command = "link "+str(end1) + " " + str(end2)+ " " + str(option)
+ #       response = self.execute(cmd=command,prompt="mininet>",timeout=10)
+ #       return main.TRUE
+ #       
+
+ #   def dpctl(self,**dpctlargs):
+ #       '''
+ #        Run dpctl command on all switches.
+ #       '''
+ #       main.log.info('Run dpctl command on all switches')
+ #       args = utilities.parse_args(["CMD","ARGS"],**dpctlargs)
+ #       cmd = args["CMD"] if args["CMD"] != None else ""
+ #       cmdargs = args["ARGS"] if args["ARGS"] != None else ""
+ #       command = "dpctl "+cmd + " " + str(cmdargs)
+ #       response = self.execute(cmd=command,prompt="mininet>",timeout=10)
+ #       return main.TRUE
+ #  
+ #       
+ #   def get_version(self):
+ #       file_input = path+'/lib/Mininet/INSTALL'
+ #       version = super(Mininet, self).get_version()
+ #       pattern = 'Mininet\s\w\.\w\.\w\w*'
+ #       for line in open(file_input,'r').readlines():
+ #           result = re.match(pattern, line)
+ #           if result:
+ #               version = result.group(0)
+ #               
+ #           
+ #       return version    
+
+    def disconnect(self):
+        
+        response = ''
+        #print "Disconnecting Mininet"
+        if self.handle:
+            self.handle.sendline("exit") 
+            self.handle.expect("exit")
+            self.handle.expect("(.*)")
+            response = self.handle.before
+
+        else :
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        return response  
+
+if __name__ != "__main__":
+    import sys
+    sys.modules[__name__] = RemoteMininetDriver()
diff --git a/TestON/drivers/common/cli/emulatordriver.py b/TestON/drivers/common/cli/emulatordriver.py
new file mode 100644
index 0000000..b561e9c
--- /dev/null
+++ b/TestON/drivers/common/cli/emulatordriver.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+'''
+Created on 26-Oct-2012 
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)      
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+''' 
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys
+sys.path.append("../")
+from drivers.common.clidriver import CLI
+
+class Emulator(CLI):
+    # The common functions for emulator included in emulatordriver
+    def __init__(self):
+        super(CLI, self).__init__()
+        
diff --git a/TestON/drivers/common/cli/onoscli/__init__.py b/TestON/drivers/common/cli/onoscli/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/cli/onoscli/__init__.py
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
new file mode 100644
index 0000000..670a492
--- /dev/null
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -0,0 +1,608 @@
+#!/usr/bin/env python
+'''
+Created on 31-May-2013 
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)      
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.        
+
+
+''' 
+import time
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys
+import re
+import json
+sys.path.append("../")
+from drivers.common.clidriver import CLI
+
+class OnosCliDriver(CLI):
+    
+    def __init__(self):
+        super(CLI, self).__init__()
+        
+    def connect(self,**connectargs):
+	'''
+        Creates ssh handle for ONOS. 
+        '''
+        for key in connectargs:
+           vars(self)[key] = connectargs[key]
+
+        
+        self.name = self.options['name']
+        self.handle = super(OnosCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+
+        if self.handle:
+            #self.start()
+            #self.start_rest()
+            return self.handle
+        else :
+            main.log.info("NO HANDLE")
+            return main.FALSE
+        
+    def start(self):
+        '''
+        Starts ONOS on remote machine.
+        Returns false if any errors were encountered. 
+        '''
+        self.handle.sendline("")
+        self.handle.expect("\$")
+        self.handle.sendline("cd ~/ONOS")
+        self.handle.expect("ONOS\$")
+        self.handle.sendline("./start-onos.sh start")
+        i=self.handle.expect(["Starting\sONOS\scontroller","Cassandra\sis\snot\srunning"])
+        if i==0:
+            if self.handle.expect("ONOS\$", 60):
+                main.log.info("ONOS Started ") 
+                return main.TRUE
+            else:  
+                main.log.info("ONOS NOT Started, stuck while waiting for it to start ") 
+                return main.FALSE
+        elif i==1:
+            main.log.error("ONOS didn't start because cassandra wasn't running.") 
+            return main.FALSE
+        
+        main.log.error("ONOS expect script missed something... ") 
+        return main.FALSE
+    
+    def link_down(self, **linkParams):
+        '''
+        Specifically used for the ONOS demo on the HW.
+        Should be replaced by actual switch drivers in the future.
+        '''
+        args = utilities.parse_args(["SDPID","SPORT","DDPID","DPORT"], **linkParams)
+        sdpid = args["SDPID"] if args["SDPID"] != None else "00:00:00:00:ba:5e:ba:13"
+        sport = args["SPORT"] if args["SPORT"] != None else "22"
+        ddpid = args["DDPID"] if args["DDPID"] != None else "00:00:20:4e:7f:51:8a:35"
+        dport = args["DPORT"] if args["DPORT"] != None else "22"
+       
+        cmd = "curl -s  10.128.4.11:9000/gui/link/down/" + sdpid + "/" + sport + "/" + ddpid + "/" + dport + " > /tmp/log &"
+        os.popen( cmd ) 
+
+    def link_up(self, **linkParams):
+        '''
+        Specifically used for the ONOS demo on the HW.
+        Should be replaced by actual switch drivers in the future.
+        '''
+        args = utilities.parse_args(["SDPID","SPORT","DDPID","DPORT"], **linkParams)
+        sdpid = args["SDPID"] if args["SDPID"] != None else "00:00:00:00:ba:5e:ba:13"
+        sport = args["SPORT"] if args["SPORT"] != None else "22"
+        ddpid = args["DDPID"] if args["DDPID"] != None else "00:00:20:4e:7f:51:8a:35"
+        dport = args["DPORT"] if args["DPORT"] != None else "22"
+       
+        cmd = "curl -s  10.128.4.11:9000/gui/link/up/" + sdpid + "/" + sport + "/" + ddpid + "/" + dport + " > /tmp/log &"
+        os.popen( cmd ) 
+
+    def start_rest(self):
+        '''
+        Starts the rest server on ONOS.
+        '''
+        self.execute(cmd="cd ONOS",prompt="ONOS\$",timeout=10)
+        response = self.execute(cmd="start-rest.sh start",prompt="\$",timeout=10)
+        if re.search("admin",response):
+            main.log.info("Rest Server Started Successfully")
+            time.sleep(5)
+            return main.TRUE
+        else :
+            main.log.warn("Failed to start Rest Server")   
+            return main.FALSE     
+        
+    def status(self):
+        '''
+        Called start-onos.sh status and returns TRUE/FALSE accordingly 
+        '''
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        response = self.execute(cmd="~/ONOS/start-onos.sh status ",prompt="\d+\sinstance\sof\sonos\srunning",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        if re.search("1\sinstance\sof\sonos\srunning",response):
+            return main.TRUE
+        elif re.search("0\sinstance\sof\sonos\srunning",response):
+            return main.FALSE
+        else :
+            return main.FALSE
+
+    def isup(self):
+        '''
+        A more complete check to see if ONOS is up and running properly. 
+        First, it checks if the process is up. 
+        Second, it reads the logs for "Exception: Connection refused" 
+        Third, it makes sure the logs are actually moving. 
+        returns TRUE/FALSE accordingly.
+        '''
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        response = self.execute(cmd="~/ONOS/start-onos.sh status ",prompt="running",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        tail1 = self.execute(cmd="tail ~/ONOS/onos-logs/onos.*.log",prompt="\$",timeout=10)
+        time.sleep(2)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        tail2 = self.execute(cmd="tail ~/ONOS/onos-logs/onos.*.log",prompt="\$",timeout=10)
+        pattern = '(.*)1 instance(.*)'
+        pattern2 = '(.*)Exception: Connection refused(.*)'
+        if utilities.assert_matches(expect=pattern,actual=response,onpass="ONOS process is running...",onfail="ONOS process not running..."):
+            if tail1 == tail2:
+                main.log.error("ONOS is frozen...")
+                return main.FALSE
+            elif re.search( pattern2,tail1 ):
+                main.log.info("Connection Refused found in onos log") 
+                return main.FALSE
+            elif re.search( pattern2,tail2 ):
+                main.log.info("Connection Refused found in onos log") 
+                return main.FALSE
+            else:
+                main.log.info("Onos log is moving! It's looking good!")
+                return main.TRUE
+        else:
+            return main.FALSE
+
+    
+    def rest_status(self): 
+        '''
+        Checks if the rest server is running. 
+        '''
+        response = self.execute(cmd="~/ONOS/start-rest.sh status ",prompt="running",timeout=10)
+        if re.search("rest\sserver\sis\srunning",response):
+            main.log.info("Rest Server is running")
+        elif re.search("rest\sserver\sis\snot\srunning",response):
+            main.log.warn("Rest Server is not Running")
+        else :
+            main.log.error("No response" +response)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        
+        return response
+    
+    def stop(self):
+        '''
+        Runs ./start-onos.sh stop to stop ONOS
+        '''
+        self.handle.sendline("")
+        self.handle.expect("\$")
+        self.handle.sendline("cd ~/ONOS")
+        self.handle.expect("ONOS\$")
+        self.handle.sendline("./start-onos.sh stop")
+        self.handle.expect("stop", 2)
+        self.handle.expect("ONOS\$", 60)
+        if re.search("Killed",response):
+            main.log.info("ONOS Killed Successfully")
+            return main.TRUE
+        else :
+            main.log.warn("ONOS wasn't running")
+            return main.FALSE
+    
+    def rest_stop(self):
+        '''
+        Runs ./start-rest.sh stop to stop ONOS rest server
+        '''
+        response = self.execute(cmd="~/ONOS/start-rest.sh stop ",prompt="killing",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        if re.search("killing", response):
+            main.log.info("Rest Server Stopped")
+            return main.TRUE
+        else :
+            main.log.error("Failed to Stop, Rest Server is not Running")
+            return main.FALSE
+        
+    def disconnect(self):
+        '''
+        Called when Test is complete to dissconnect the ONOS handle.  
+        '''
+        if self.handle:
+            self.handle.sendline("exit")
+            self.handle.expect("closed") 
+            if self.handle.isalive():   
+                response = main.TRUE
+        else :
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        return response 
+
+    def get_version(self):
+        ''' 
+        Writes the COMMIT number to the report to be parsed by Jenkins data collecter.  
+        ''' 
+        self.handle.sendline("cat /home/admin/ONOS/.git/ORIG_HEAD")
+        self.handle.expect("ORIG_HEAD")
+        self.handle.expect("\$")
+        main.log.report( "COMMIT: " + str(self.handle.before + self.handle.after))
+
+    def add_flow(self, path):
+        ''' 
+        Copies the flowdef file from TestStation -> ONOS machine
+        Then runs ./add_flow.py to add the flows to ONOS
+        ''' 
+        main.log.info("Adding Flows...")
+        self.handle.sendline("scp admin@10.128.7.7:%s /tmp/flowtmp" % path) 
+        self.handle.expect("100%")
+        self.handle.expect("\$", 30)
+        self.handle.sendline("~/ONOS/web/add_flow.py -m onos -f /tmp/flowtmp") 
+        self.handle.expect("add_flow")
+        self.handle.expect("\$", 1000)
+        main.log.info("Flows added")
+
+    def delete_flow(self, *delParams):
+        '''
+        Deletes a specific flow, a range of flows, or all flows.
+        '''
+        if len(delParams)==1:
+             if str(delParams[0])=="all":
+                  main.log.info("Deleting ALL flows...")
+                  #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh all",prompt="done",timeout=150)
+                  self.handle.sendline("~/ONOS/web/delete_flow.py all")
+                  self.handle.expect("delete_flow")
+                  self.handle.expect("\$",1000)
+                  self.handle.sendline("~/ONOS/web/clear_flow.py all")
+                  self.handle.expect("clear_flow")
+                  self.handle.expect("\$",1000)
+                  main.log.info("Flows deleted")
+             else:
+                  main.log.info("Deleting flow "+str(delParams[0])+"...")
+                  #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0]),prompt="done",timeout=150)
+                  #self.execute(cmd="\n",prompt="\$",timeout=60)
+                  self.handle.sendline("~/ONOS/web/delete_flow.py %d" % int(delParams[0]))
+                  self.handle.expect("delete_flow")
+                  self.handle.expect("\$",60)
+                  self.handle.sendline("~/ONOS/web/clear_flow.py %d" % int(delParams[0]))
+                  self.handle.expect("clear_flow")
+                  self.handle.expect("\$",60)
+                  main.log.info("Flow deleted")
+        elif len(delParams)==2:
+             main.log.info("Deleting flows "+str(delParams[0])+" through "+str(delParams[1])+"...")
+             #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0])+" "+str(delParams[1]),prompt="done",timeout=150)
+             #self.execute(cmd="\n",prompt="\$",timeout=60)
+             self.handle.sendline("~/ONOS/web/delete_flow.py %d %d" % (int(delParams[0]), int(delParams[1])))
+             self.handle.expect("delete_flow")
+             self.handle.expect("\$",600)
+             self.handle.sendline("~/ONOS/web/clear_flow.py %d %d" % (int(delParams[0]), int(delParams[1])))
+             self.handle.expect("clear_flow")
+             self.handle.expect("\$",600)
+             main.log.info("Flows deleted")
+
+    def check_flow(self):
+        '''
+        Calls the ./get_flow.py all and checks:
+          - If each FlowPath has at least one FlowEntry  
+          - That there are no "NOT"s found
+        returns TRUE/FALSE 
+        '''
+        flowEntryDetect = 1
+        count = 0
+        self.handle.sendline("clear")
+        time.sleep(1)
+        self.handle.sendline("~/ONOS/web/get_flow.py all")
+        self.handle.expect("get_flow")
+        while 1:
+            i=self.handle.expect(['FlowPath','FlowEntry','NOT','\$',pexpect.TIMEOUT],timeout=180)
+            if i==0:
+                count = count + 1
+                if flowEntryDetect == 0:
+                    main.log.info("FlowPath without FlowEntry")
+                    return main.FALSE
+                else:
+                    flowEntryDetect = 0
+            elif i==1:
+                flowEntryDetect = 1
+            elif i==2:
+                main.log.error("Found a NOT")
+                return main.FALSE
+            elif i==3:
+                if count == 0:
+                    main.log.info("There don't seem to be any flows here...")
+                    return main.FALSE
+                else:
+                    main.log.info("All flows pass")
+                    main.log.info("Number of FlowPaths: "+str(count))
+                    return main.TRUE
+            elif i==4:
+                main.log.error("Command Timeout!")
+                return main.FALSE
+
+    def get_flow(self, *flowParams):
+         '''
+         Returns verbose output of ./get_flow.py
+         '''
+         if len(flowParams)==1:
+              if str(flowParams[0])=="all":
+                   self.execute(cmd="\n",prompt="\$",timeout=60)
+                   main.log.info("Getting all flow data...")
+                   data = self.execute(cmd="~/ONOS/scripts/TestON_get_flow.sh all",prompt="done",timeout=150)
+                   self.execute(cmd="\n",prompt="\$",timeout=60)
+                   return data
+              else:
+                   main.log.info("Retrieving flow "+str(flowParams[0])+" data...")
+                   data = self.execute(cmd="~/ONOS/scripts/TestON_get_flow.sh "+str(flowParams[0]),prompt="done",timeout=150)
+                   self.execute(cmd="\n",prompt="\$",timeout=60)
+                   return data
+         elif len(flowParams)==5:
+              main.log.info("Retrieving flow installer data...")
+              data = self.execute(cmd="~/ONOS/scripts/TestON_get_flow.sh "+str(flowParams[0])+" "+str(flowParams[1])+" "+str(flowParams[2])+" "+str(flowParams[3])+" "+str(flowParams[4]),prompt="done",timeout=150)
+              self.execute(cmd="\n",prompt="\$",timeout=60)
+              return data
+         elif len(flowParams)==4:
+              main.log.info("Retrieving flow endpoints...")
+              data = self.execute(cmd="~/ONOS/scripts/TestON_get_flow.sh "+str(flowParams[0])+" "+str(flowParams[1])+" "+str(flowParams[2])+" "+str(flowParams[3]),prompt="done",timeout=150)
+              self.execute(cmd="\n",prompt="\$",timeout=60)
+              return data
+
+
+# http://localhost:8080/wm/core/topology/switches/all/json
+# http://localhost:8080/wm/core/topology/links/json
+# http://localhost:8080/wm/registry/controllers/json
+# http://localhost:8080/wm/registry/switches/json"
+
+    def get_json(self, url):
+        '''
+        Helper functions used to parse the json output of a rest call 
+        '''
+        try:
+            command = "curl -s %s" % (url)
+            result = os.popen(command).read()
+            parsedResult = json.loads(result)
+        except:
+            print "REST IF %s has issue" % command
+            parsedResult = ""
+    
+        if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
+            print "REST %s returned code %s" % (command, parsedResult['code'])
+            parsedResult = ""
+        return parsedResult 
+
+    def check_switch(self,RestIP,correct_nr_switch ):
+        ''' 
+        Used by check_status 
+        ''' 
+        buf = ""
+        retcode = 0
+        RestPort="8080"
+        url="http://%s:%s/wm/core/topology/switches/all/json" % (RestIP, RestPort)
+        parsedResult = self.get_json(url)
+        if parsedResult == "":
+            retcode = 1
+            return (retcode, "Rest API has an issue")
+        url = "http://%s:%s/wm/registry/switches/json" % (RestIP, RestPort)
+        registry = self.get_json(url)
+    
+        if registry == "":
+            retcode = 1
+            return (retcode, "Rest API has an issue")
+    
+        cnt = 0
+        active = 0
+
+        for s in parsedResult:
+            cnt += 1
+            if s['state']  == "ACTIVE":
+               active += 1
+
+        buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
+        if correct_nr_switch != cnt:
+            buf += "switch fail: network %d should have %d switches but has %d\n" % (1, correct_nr_switch, cnt)
+            retcode = 1
+
+        if correct_nr_switch != active:
+            buf += "switch fail: network %d should have %d active switches but has %d\n" % (1, correct_nr_switch, active)
+            retcode = 1
+    
+        return (retcode, buf)
+
+    def check_link(self,RestIP, nr_links):
+        ''' 
+        Used by check_status 
+        ''' 
+        RestPort = "8080"
+        buf = ""
+        retcode = 0
+    
+        url = "http://%s:%s/wm/core/topology/links/json" % (RestIP, RestPort)
+        parsedResult = self.get_json(url)
+    
+        if parsedResult == "":
+            retcode = 1
+            return (retcode, "Rest API has an issue")
+    
+        buf += "link: total %d links (correct : %d)\n" % (len(parsedResult), nr_links)
+        intra = 0
+        interlink=0
+    
+        for s in parsedResult:
+            intra = intra + 1 
+    
+        if intra != nr_links:
+            buf += "link fail\n"
+            retcode = 1
+    
+        return (retcode, buf)
+
+    def check_status_report(self, ip, numoswitch, numolink):
+        ''' 
+        Checks the number of swithes & links that ONOS sees against the supplied values.
+        Writes to the report log.  
+        ''' 
+        main.log.info("Making some rest calls...") 
+        switch = self.check_switch(ip, int(numoswitch))
+        link = self.check_link(ip, int(numolink))
+        value = switch[0]
+        value += link[0]
+        main.log.report( "\n-----\n%s%s-----\n" % ( switch[1], link[1]) )
+        if value != 0:
+            return 0
+        else: 
+            # "PASS"
+            return 1
+
+    def check_status(self, ip, numoswitch, numolink):
+        ''' 
+        Checks the number of swithes & links that ONOS sees against the supplied values.
+        Writes to the main log.  
+        ''' 
+        main.log.info("Making some rest calls...") 
+        switch = self.check_switch(ip, int(numoswitch))
+        link = self.check_link(ip, int(numolink))
+        value = switch[0]
+        value += link[0]
+        main.log.info( "\n-----\n%s%s-----\n" % ( switch[1], link[1]) )
+        if value != 0:
+            return 0
+        else: 
+            # "PASS"
+            return 1
+ 
+    def drop_keyspace(self):
+        '''
+        Drops the ONOS keyspace
+        '''
+        self.handle.sendline("~/ONOS/scripts/test-drop-keyspace.sh")
+        self.handle.expect("keyspace")
+        self.handle.sendline("")
+        self.handle.expect("\$")
+        self.handle.expect("\$")
+
+    def ctrl_none(self):
+        '''
+        Points all the mininet swithces to no controllers 
+        *NOTE will only work if CLUSTER is set up on ONOS nodes
+        '''
+        self.execute(cmd="switch none", prompt="\$",timeout=10)
+
+    def ctrl_one(self, ip):
+        '''
+        Points all the mininet swithces to all controllers 
+        *NOTE will only work if CLUSTER is set up on ONOS nodes
+        '''
+        self.execute(cmd="switch one", prompt="\$",timeout=10)
+
+    def check_for_no_exceptions(self):
+        '''
+        Used by CassndraCheck.py to scan ONOS logs for Exceptions
+        '''
+        self.handle.sendline(r"dsh 'grep Exception ~/ONOS/onos-logs/onos.*.log'")
+        self.handle.expect("\$ dsh") 
+        self.handle.expect("\$")
+        output = self.handle.before
+        main.log.info( output ) 
+        if re.search("Exception",output):
+            return main.FALSE
+        else :
+            return main.TRUE
+ 
+    def git_pull(self):
+        '''
+        Stops the ONOS, pulls the latest code, and builds with mvn. 
+        Assumes that "git pull" works without login 
+        '''
+        main.log.info("Stopping onos") 
+        self.stop()
+        self.handle.sendline("cd ~/ONOS") 
+        self.handle.expect("ONOS\$")
+        self.handle.sendline("git pull")
+        
+        i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','Unpacking\sobjects',pexpect.TIMEOUT,'Already up-to-date','Aborting'],timeout=180)
+        if i==0:
+            main.log.error("Git pull had some issue...") 
+            return main.FALSE
+        elif i==1:
+            main.log.error("Asking for username!!! BADD!") 
+            return false 
+            
+            self.handle.expect('Password\sfor\s(.*):\s')
+            j = self.handle.expect(['Unpacking\sobjects','Already up-to-date'])
+            if j == 0:
+                main.log.info("pulling repository now")
+            elif j == 1:
+                main.log.info("Up to date!")
+            else:
+                main.log.error("something went wrong")
+                return main.FALSE
+            self.handle.expect("ONOS\$", 30)
+        elif i==2:
+            main.log.info("pulling repository now")
+            self.handle.expect("ONOS\$", 30)
+        elif i==3:
+            main.log.error("TIMEOUT")
+            return main.FALSE
+        elif i==4:
+            main.log.info("Already up to date") 
+        elif i==5:
+            main.log.info("Aborting... Are there conflicting git files?")
+            return main.FALSE
+        
+        
+        main.log.info("./setup-local-maven.sh")
+        self.handle.sendline("./setup-local-maven.sh")
+        self.handle.expect("local-maven.sh")
+        while 1: 
+            i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=90)
+            if i == 0:
+                main.log.error("Build failure!")
+                return main.FALSE
+            elif i == 1:
+                main.log.info("Build success!")
+            elif i == 2:
+                main.log.info("Build complete") 
+                break;
+            elif i == 3:
+                main.log.error("TIMEOUT!")
+                return main.FALSE
+ 
+        main.log.info("mvn clean") 
+        self.handle.sendline("mvn clean")
+        while 1: 
+            i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
+            if i == 0:
+                main.log.error("Build failure!")
+                return main.FALSE
+            elif i == 1:
+                main.log.info("Build success!")
+            elif i == 2:
+                main.log.info("Build complete") 
+                break;
+            elif i == 3:
+                main.log.error("TIMEOUT!")
+                return main.FALSE
+        
+        main.log.info("mvn compile") 
+        self.handle.sendline("mvn compile")
+        while 1: 
+            i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
+            if i == 0:
+                main.log.error("Build failure!")
+                return main.FALSE
+            elif i == 1:
+                main.log.info("Build success!")
+            elif i == 2:
+                main.log.info("Build complete") 
+                break;
+            elif i == 3:
+                main.log.error("TIMEOUT!")
+                return main.FALSE
+        
diff --git a/TestON/drivers/common/cli/remotesys/__init__.py b/TestON/drivers/common/cli/remotesys/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/cli/remotesys/__init__.py
diff --git a/TestON/drivers/common/cli/remotesysdriver.py b/TestON/drivers/common/cli/remotesysdriver.py
new file mode 100644
index 0000000..ab11f6a
--- /dev/null
+++ b/TestON/drivers/common/cli/remotesysdriver.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+'''
+Created on 26-Oct-2012 
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)      
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+''' 
+import time
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys
+sys.path.append("../")
+from drivers.common.clidriver import CLI
+
+class RemoteSysDriver(CLI):
+    # The common functions for emulator included in emulatordriver
+    def __init__(self):
+        super(CLI, self).__init__()
+        
+    def connect(self,**connectargs):
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        
+        self.name = self.options['name']
+
+        self.handle = super(RemoteSysDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+        '''
+        if self.handle:
+            self.execute(cmd= "\r",prompt= "\$|>|#",timeout= 10)
+            self.execute(cmd= "ssh -l paxterra 10.128.4.1",prompt= "paxterra@10.128.4.1's password:",timeout= 10)
+            self.execute(cmd= "\r",prompt= "paxterra@10.128.4.1's password:",timeout= 10)
+            self.execute(cmd = "0nLab_gu3st",prompt = "\$",timeout = 10)
+            self.execute(cmd = "cd TestON/bin/",prompt = "\$",timeout = 10)
+            self.execute(cmd = "./cli.py run Assert example 1",prompt = "\$",timeout = 10)
+            self.execute(cmd= "\r",prompt= "$",timeout= 10)
+            #self.execute(cmd = "help",prompt = ">",timeout = 10)
+            
+            #self.execute(cmd = "~.",prompt= ".*",timeout= 10)
+        return main.TRUE
+        '''
+
diff --git a/TestON/drivers/common/cli/remotetestbed/__init__.py b/TestON/drivers/common/cli/remotetestbed/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/cli/remotetestbed/__init__.py
diff --git a/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py b/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py
new file mode 100644
index 0000000..8b25b2f
--- /dev/null
+++ b/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+'''
+Created on 12-Feb-2013
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+FloodLightCliDriver is the basic driver which will handle the Mininet functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import time
+
+sys.path.append("../")
+
+from drivers.common.cli.remotetestbeddriver import RemoteTestBedDriver
+
+class FloodLightCliDriver(RemoteTestBedDriver):
+    '''
+        FloodLightCliDriver is the basic driver which will handle the Mininet functions
+    '''
+    def __init__(self):
+        super(RemoteTestBedDriver, self).__init__()
+        
+    def connect(self,**connectargs):
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        
+        self.name = self.options['name']
+
+        self.handle = super(FloodLightCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+        if self.handle :
+            main.log.info("Connected "+self.name)
+            self.execute(cmd="\r",prompt="\$",timeout=10)
+            self.execute(cmd="cd /home/openflow/floodlight/",prompt="floodlight\$",timeout=3)
+            self.execute(cmd="java -jar target/floodlight.jar &",prompt="\$",timeout=3)
+            self.execute(cmd="\r",prompt="\$",timeout=10)
+            return self.handle
+        else :
+            return main.FALSE
diff --git a/TestON/drivers/common/cli/remotetestbed/flowvisorclidriver.py b/TestON/drivers/common/cli/remotetestbed/flowvisorclidriver.py
new file mode 100644
index 0000000..936ce9d
--- /dev/null
+++ b/TestON/drivers/common/cli/remotetestbed/flowvisorclidriver.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+'''
+Created on 12-Feb-2013
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+FlowVisorCliDriver is the basic driver which will handle the Mininet functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import time
+
+sys.path.append("../")
+
+from drivers.common.cli.remotetestbeddriver import RemoteTestBedDriver
+
+class FlowVisorCliDriver(RemoteTestBedDriver):
+    '''
+        FlowVisorCliDriver is the basic driver which will handle the Mininet functions
+    '''
+    def __init__(self):
+        super(RemoteTestBedDriver, self).__init__()
+        
+    def connect(self,**connectargs):
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        
+        self.name = self.options['name']
+
+        self.handle = super(FlowVisorCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+        if self.handle :
+            main.log.info(self.name+" connected successfully")
+            return self.handle
+        else :
+            main.log.error("Failed to connect "+self.name)
+            return main.FALSE
+    
+    def removeFlowSpace(self,id):
+        if id == "all":
+            flow_space = self.listFlowSpace()
+            flow_ids = re.findall("\,id=\[(\d+)\]", flow_space)
+            for id in flow_ids :
+                self.removeFlowSpace(id)
+        else :
+            self.execute(cmd="clear",prompt="\$",timeout=10)
+            self.execute(cmd="fvctl removeFlowSpace "+id,prompt="passwd:",timeout=10)
+            self.execute(cmd="\r",prompt="\$",timeout=10)
+            main.log.info("Removed flowSpace which is having id :"+id)
+            
+        return main.TRUE
+        
+    def addFlowSpace(self,flow_space):
+        self.execute(cmd="clear",prompt="\$",timeout=10)
+        self.execute(cmd="fvctl addFlowSpace "+flow_space,prompt="passwd:",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        sucess_match = re.search("success\:\s+(\d+)", main.last_response)
+        if sucess_match :
+            main.log.info("Added flow Space and id is "+sucess_match.group(1))
+            return main.TRUE
+        else :
+            return main.FALSE
+    
+    def listFlowSpace(self):
+        self.execute(cmd="clear",prompt="\$",timeout=10)
+        self.execute(cmd="fvctl listFlowSpace ",prompt="passwd:",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        flow_space = main.last_response
+        flow_space = self.remove_contol_chars( flow_space)
+        flow_space = re.sub("rule\s(\d+)\:", "\nrule "+r'\1'+":",flow_space)
+        #main.log.info(flow_space)
+        
+        return main.TRUE
+        
+    def listDevices(self):
+        self.execute(cmd="clear",prompt="\$",timeout=10)
+        self.execute(cmd="fvctl listDevices ",prompt="passwd:",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        devices_list = ''
+        last_response = re.findall("(Device\s\d+\:\s((\d|[a-z])(\d|[a-z])\:)+(\d|[a-z])(\d|[a-z]))", main.last_response)
+        
+        for resp in last_response :
+            devices_match = re.search("(Device\s\d+\:\s((\d|[a-z])(\d|[a-z])\:)+(\d|[a-z])(\d|[a-z]))", str(resp))
+            if devices_match:
+                devices_list = devices_list+devices_match.group(0)+"\n"
+        main.log.info("List of Devices \n"+devices_list)  
+        return main.TRUE
+    
+    
+    
diff --git a/TestON/drivers/common/cli/remotetestbed/hpswitchclidriver.py b/TestON/drivers/common/cli/remotetestbed/hpswitchclidriver.py
new file mode 100644
index 0000000..24d9696
--- /dev/null
+++ b/TestON/drivers/common/cli/remotetestbed/hpswitchclidriver.py
@@ -0,0 +1,230 @@
+#!/usr/bin/env python
+'''
+Created on 24-June-2013 
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)      
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.        
+
+
+''' 
+import time
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys
+import re
+sys.path.append("../")
+from drivers.common.clidriver import CLI
+
+class HPSwitch(CLI):
+    
+    def __init__(self):
+        super(CLI, self).__init__()
+        
+    def connect(self,**connectargs):
+        for key in connectargs:
+           vars(self)[key] = connectargs[key]
+
+        self.name = self.options['name']
+        self.handle = super(HPSwitch,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+
+        return main.TRUE
+
+    def configure(self):
+        self.execute(cmd='configure', prompt = '\(config\)',timeout = 3)
+        if re.search('\(config\)', main.last_response):
+            main.log.info("Configure mode enabled"+main.last_response)
+        else : 
+            main.log.warn("Fail to enable configure mode"+main.last_response)
+        
+
+    def set_up_vlan(self,**vlanargs):
+        '''
+        Configure vlan.
+        '''
+        for key in vlanargs:
+           vars(self)[key] = vlanargs[key]
+           
+        self.execute(cmd='vlan '+self.vlan_id, prompt = '\(vlan-'+self.vlan_id+'\)',timeout = 3)
+        if re.search('\(vlan-'+self.vlan_id+'\)', main.last_response):
+            main.log.info("Configuring VLAN "+self.vlan_id)
+        else : 
+            main.log.warn("Fail to configure Vlan"+self.vlan_id+main.last_response)
+            return main.FALSE
+        
+        if self.vlan_name :
+            self.execute(cmd='name '+self.vlan_name, prompt = '\(vlan-'+self.vlan_id+'\)',timeout = 3)
+            if re.search('\(vlan-'+self.vlan_id+'\)', main.last_response):
+                main.log.info("Configuring "+self.vlan_id)
+                return main.TRUE
+            else : 
+                main.log.warn("Fail to configure Vlan"+self.vlan_id+main.last_response)
+                return main.FALSE
+        else :
+            main.log.error("Vlan Name not specified")
+            return main.FALSE
+        
+    def vlan_tagged(self, **taggedargs):
+        for key in taggedargs:
+           vars(self)[key] = taggedargs[key]
+        if self.vlan_id :
+            self.execute(cmd='vlan '+self.vlan_id, prompt = '\(vlan-'+self.vlan_id+'\)',timeout = 3)
+            
+            if re.search('\(vlan-'+self.vlan_id+'\)', main.last_response):
+                main.log.info("Configuring "+self.vlan_id)
+            else : 
+                main.log.warn("Fail to configure Vlan"+self.vlan_id+main.last_response)
+                return main.FALSE
+            if self.tagged :
+                self.execute(cmd='tagged '+self.vlan_id, prompt = '\(vlan-'+self.vlan_id+'\)',timeout = 3)
+                if re.search('\(vlan-'+self.vlan_id+'\)', main.last_response):
+                    main.log.info("VLAN tagged done "+self.tagged)
+                    return main.TRUE
+                else : 
+                    main.log.warn("Fail to tagged Vlan"+self.vlan_id+main.last_response)
+                    return main.FALSE
+            
+    def vlan_untagged(self, **untaggedargs):
+        for key in untaggedargs:
+           vars(self)[key] = untaggedargs[key]
+        if self.vlan_id :
+            self.execute(cmd='vlan '+self.vlan_id, prompt = '\(vlan-'+self.vlan_id+'\)',timeout = 3)
+            
+            if re.search('\(vlan-'+self.vlan_id+'\)', main.last_response):
+                main.log.info("Configuring "+self.vlan_id)
+            else : 
+                main.log.warn("Fail to configure Vlan"+self.vlan_id+main.last_response)
+                return main.FALSE
+            if self.tagged :
+                self.execute(cmd='untagged '+self.vlan_id, prompt = '\(vlan-'+self.vlan_id+'\)',timeout = 3)
+                if re.search('\(vlan-'+self.vlan_id+'\)', main.last_response):
+                    main.log.info("VLAN untagged done "+self.tagged)
+                    return main.TRUE
+                else : 
+                    main.log.warn("Fail to untagged Vlan"+self.vlan_id+main.last_response)
+                    return main.FALSE
+                
+    def openflow_mode(self):
+        self.configure()
+        self.execute(cmd='openflow', prompt = '\(openflow\)',timeout = 3)
+        if re.search('\(openflow\)', main.last_response):
+            main.log.info("Openflow mode enabled"+main.last_response)
+            return main.TRUE
+        else : 
+            main.log.warn("Fail to enable Openflow mode"+main.last_response)
+            return main.FALSE
+
+
+    def add_openflow_controller(self,**controllerargs):
+        for key in controllerargs:
+           vars(self)[key] = controllerargs[key]
+           
+        if not self.openflow_mode():
+            return main.FALSE
+            
+        contoller_details = 'controller-id '+ self.controller_id+'ip '+self.controller_ip + 'controller-interface vlan '+self.interface_vlan_id  
+        self.execute(cmd=contoller_details, prompt = '\(openflow\)',timeout = 3)
+        
+        if re.search('already\sconfigured', main.last_response):
+            main.log.warn("A controller is already configured with this ID."+main.last_response)
+            return main.FALSE
+        elif re.search('Incomplete\sinput',main.last_response ) :             
+            main.log.warn("Incomplete\sinput"+main.last_response)
+            return main.FALSE
+        else:
+            main.log.info("Successfully added Openflow Controller")
+            return main.TRUE
+        
+        
+    def create_openflow_instance(self,**instanceargs):
+        for key in instanceargs:
+           vars(self)[key] = instanceargs[key]
+        
+        if not self.openflow_mode():
+            return main.FALSE
+        
+        if self.instance_name :
+            self.execute(cmd='instance '+self.instance_name, prompt = '\(of-inst-'+self.instance_name+'\)',timeout = 3)
+            
+            if re.search('\(of-inst-'+self.instance_name+'\)', main.last_response):
+                main.log.info("Configuring Openflow instance "+self.instance_name)
+            else : 
+                main.log.warn("Fail to configure Openflow instance"+self.instance_name+"\n\n"+main.last_response)
+                return main.FALSE
+        if self.controller_id :
+            self.execute(cmd='controller-id '+self.controller_id, prompt = '\(of-inst-'+self.instance_name+'\)',timeout = 3)
+            main.log.info(main.last_response)
+        
+        if self.member :
+            self.execute(cmd='member vlan '+self.member_vlan_id, prompt = '\(of-inst-'+self.instance_name+'\)',timeout = 3)
+            main.log.info(main.last_response)
+    
+        if self.execute(cmd='enable', prompt = '\(of-inst-'+self.instance_name+'\)',timeout = 3):
+            return main.TRUE
+        else :
+            return main.FALSE
+    
+    def pair_vlan_with_openflow_instance(self,vlan_id):
+        self.configure()
+        self.execute(cmd='vlan '+vlan_id, prompt = '\(vlan-'+vlan_id+'\)',timeout = 3)
+        if re.search('\(vlan-'+vlan_id+'\)', main.last_response):
+            main.log.info("Configuring VLAN "+vlan_id)
+        else : 
+            main.log.warn("Fail to configure Vlan"+self.vlan_id+main.last_response)
+            return main.FALSE
+        
+        self.execute(cmd='openflow enable', prompt = '\(vlan-'+vlan_id+'\)',timeout = 3)
+        if re.search('\(vlan-'+vlan_id+'\)', main.last_response):
+            main.log.info("Configuring VLAN "+vlan_id)
+        else : 
+            main.log.warn("Fail to configure Vlan"+self.vlan_id+main.last_response)
+            return main.FALSE
+        
+    def show_openflow_instance(self,instance_name):
+        
+        self.execute(cmd='show openflow instance '+instance_name, prompt = '#',timeout = 3)
+        return main.TRUE
+    
+    def show(self, command):
+        self.execute(cmd=command, prompt = '#',timeout = 3)
+        return main.TRUE
+    
+    
+    def openflow_enable(self):
+        self.configure()
+        self.execute(cmd='openflow enable', prompt = '#',timeout = 3)
+        return main.TRUE
+    
+    def openflow_disable(self):
+        self.configure()
+        self.execute(cmd='openflow enable', prompt = '#',timeout = 3)
+        return main.TRUE
+    
+    def remove_controller(self,controller_id):
+        self.configure()
+        self.execute(cmd='no controller-id '+controller_id, prompt = '#',timeout = 3)
+        return main.TRUE
+    
+    def remove_vlan(self,vlan_id):
+        self.configure()
+        if self.execute(cmd='no vlan '+vlan_id, prompt = '#',timeout = 3):
+            return main.TRUE
+        else :
+            self.execute(cmd=' '+vlan_id, prompt = '#',timeout = 3)
+            return main.TRUE
+    
+    def remove_openflow_instance(self,instance_name):
+        self.configure()
+        self.execute(cmd='no openflow instance '+instance_name, prompt = '#',timeout = 3)
+        return main.TRUE
diff --git a/TestON/drivers/common/cli/remotetestbed/necswitchdriver.py b/TestON/drivers/common/cli/remotetestbed/necswitchdriver.py
new file mode 100644
index 0000000..f5e652a
--- /dev/null
+++ b/TestON/drivers/common/cli/remotetestbed/necswitchdriver.py
@@ -0,0 +1,545 @@
+class NEC:
+    def __init__( self ):
+        self.prompt = '(.*)'
+        self.timeout = 60 
+
+    def show(self, *options, **def_args ):
+        '''Possible Options :['  access-filter  ', '  accounting  ', '  acknowledgments  ', '  auto-config  ', '  axrp  ', '  cfm  ', '  channel-group  ', '  clock  ', '  config-lock-status  ', '  cpu  ', '  dhcp  ', '  dot1x  ', '  dumpfile  ', '  efmoam  ', '  environment  ', '  file  ', '  flash  ', '  gsrp  ', '  history  ', '  igmp-snooping  ', '  interfaces  ', '  ip  ', '  ip-dual  ', '  ipv6-dhcp  ', '  license  ', '  lldp  ', '  logging  ', '  loop-detection  ', '  mac-address-table  ', '  mc  ', '  memory  ', '  mld-snooping  ', '  netconf  ', '  netstat  ', '  ntp  ', '  oadp  ', '  openflow  ', '  port  ', '  power  ', '  processes  ', '  qos  ', '  qos-flow  ', '  sessions  ', '  sflow  ', '  spanning-tree  ', '  ssh  ', '  system  ', '  tcpdump  ', '  tech-support  ', '  track  ', '  version  ', '  vlan  ', '  vrrpstatus  ', '  whoami  ']'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_ip(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   ip   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_mc(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   mc   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_cfm(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   cfm   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_ntp(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   ntp   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_ssh(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   ssh   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_qos(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   qos   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_cpu(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   cpu   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_vlan(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   vlan   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_lldp(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   lldp   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_dhcp(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   dhcp   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_axrp(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   axrp   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_oadp(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   oadp   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_gsrp(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   gsrp   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_port(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   port   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_file(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   file   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_power(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   power   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_clock(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   clock   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_dot1x(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   dot1x   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_sflow(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   sflow   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_track(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   track   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_flash(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   flash   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_system(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   system   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_whoami(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   whoami   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_efmoam(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   efmoam   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_memory(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   memory   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_tcpdump(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   tcpdump   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_history(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   history   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_logging(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   logging   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_license(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   license   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_netstat(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   netstat   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_version(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   version   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_netconf(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   netconf   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_ipdual(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   ip-dual   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_sessions(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   sessions   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_qosflow(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   qos-flow   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_openflow(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   openflow   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_dumpfile(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   dumpfile   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_ipv6dhcp(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   ipv6-dhcp   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_processes(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   processes   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_vrrpstatus(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   vrrpstatus   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_interfaces(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   interfaces   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_environment(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   environment   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_autoconfig(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   auto-config   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_techsupport(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   tech-support   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_mldsnooping(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   mld-snooping   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_igmpsnooping(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   igmp-snooping   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_channelgroup(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   channel-group   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_spanningtree(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   spanning-tree   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_loopdetection(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   loop-detection   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_acknowledgments(self, *options, **def_args ):
+        '''Possible Options :['  interface  ']'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   acknowledgments   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_macaddresstable(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   mac-address-table   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_configlockstatus(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   config-lock-status   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
+    def show_acknowledgments_interface(self, *options, **def_args ):
+        '''Possible Options :[]'''
+        arguments= ''
+        for option in options:
+            arguments = arguments + option +' ' 
+        prompt = def_args.setdefault('prompt',self.prompt)
+        timeout = def_args.setdefault('timeout',self.timeout)
+        self.execute( cmd= "show   acknowledgments     interface   "+ arguments, prompt = prompt, timeout = timeout ) 
+        return main.TRUE
+
diff --git a/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py b/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py
new file mode 100644
index 0000000..f0d2a16
--- /dev/null
+++ b/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+'''
+Created on 12-Feb-2013
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+RemoteVMDriver is the basic driver which will handle the Mininet functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import time
+
+sys.path.append("../")
+
+from drivers.common.cli.remotetestbeddriver import RemoteTestBedDriver
+
+class RemotePoxDriver(RemoteTestBedDriver):
+    '''
+        RemoteVMDriver is the basic driver which will handle the Mininet functions
+    '''
+    def __init__(self):
+        super(RemoteTestBedDriver, self).__init__()
+        
+    def connect(self,**connectargs):
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        
+        self.name = self.options['name']
+
+        self.handle = super(RemotePoxDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+        if self.handle :
+            main.log.info(self.name+" connected successfully ")  
+            
+            self.execute(cmd="cd "+self.options['pox_lib_location'],prompt="/pox\$",timeout=120)
+            self.execute(cmd='./pox.py samples.of_tutorial',prompt="DEBUG:",timeout=120)
+            return self.handle
+        return main.TRUE
+        
+    def disconnect(self,handle):
+        if self.handle:
+            self.execute(cmd="exit()",prompt="/pox\$",timeout=120)
+        else :
+            main.log.error("Connection failed to the host") 
diff --git a/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py b/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py
new file mode 100644
index 0000000..4592e71
--- /dev/null
+++ b/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+'''
+Created on 12-Feb-2013
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+RemoteVMDriver is the basic driver which will handle the Mininet functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import time
+
+sys.path.append("../")
+
+from drivers.common.cli.remotetestbeddriver import RemoteTestBedDriver
+
+class RemoteVMDriver(RemoteTestBedDriver):
+    '''
+        RemoteVMDriver is the basic driver which will handle the Mininet functions
+    '''
+    def __init__(self):
+        super(RemoteTestBedDriver, self).__init__()
+        
+    def connect(self,**connectargs):
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        
+        self.name = self.options['name']
+
+        self.handle = super(RemoteVMDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+        if self.handle :
+            main.log.info(self.name+" connected successfully ")  
+            return self.handle
+        return main.TRUE
+    def SSH(self,**connectargs):
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+        
+        '''
+           Connection will establish to the remote host using ssh.
+           It will take user_name ,ip_address and password as arguments<br>
+           and will return the handle. 
+        '''
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+            
+        ssh_newkey = 'Are you sure you want to continue connecting'
+        refused = "ssh: connect to host "+self.ip_address+" port 22: Connection refused"
+        if self.port:
+            self.handle.sendline('ssh -p '+self.port+' '+self.user_name+'@'+self.ip_address)
+        else :
+            self.handle.sendline('ssh '+self.user_name+'@'+self.ip_address)
+            self.handle.sendline("\r")
+            
+        i=self.handle.expect([ssh_newkey,'password:',pexpect.EOF,pexpect.TIMEOUT,refused],120)
+        
+        if i==0:    
+            main.log.info("ssh key confirmation received, send yes")
+            self.handle.sendline('yes')
+            i=self.handle.expect([ssh_newkey,'password:',pexpect.EOF])
+        if i==1:
+            main.log.info("ssh connection asked for password, gave password")
+            self.handle.sendline(self.pwd)
+            self.handle.expect('>|#|$')
+            
+        elif i==2:
+            main.log.error("Connection timeout")
+            return main.FALSE
+        elif i==3: #timeout
+            main.log.error("No route to the Host "+self.user_name+"@"+self.ip_address)
+            return main.FALSE
+        elif i==4:
+            main.log.error("ssh: connect to host "+self.ip_address+" port 22: Connection refused")
+            return main.FALSE
+
+        self.handle.sendline("\r")        
+        return main.TRUE
diff --git a/TestON/drivers/common/cli/remotetestbeddriver.py b/TestON/drivers/common/cli/remotetestbeddriver.py
new file mode 100644
index 0000000..5ade2ec
--- /dev/null
+++ b/TestON/drivers/common/cli/remotetestbeddriver.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+'''
+Created on 26-Oct-2012 
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)      
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+''' 
+import time
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys
+sys.path.append("../")
+from drivers.common.clidriver import CLI
+
+class RemoteTestBedDriver(CLI):
+    # The common functions for emulator included in RemoteTestBedDriver
+    def __init__(self):
+        super(CLI, self).__init__()
+        
+    def connect(self,**connectargs):
+        for key in connectargs:
+           vars(self)['vm_'+key] = connectargs[key]
+
+        remote_user_name = main.componentDictionary[self.name]['remote_user_name']
+        remote_ip_address = main.componentDictionary[self.name]['remote_ip_address']
+        remote_port = main.componentDictionary[self.name]['remote_port'] 
+        remote_pwd = main.componentDictionary[self.name]['remote_pwd']
+        
+        self.handle = super(RemoteTestBedDriver,self).connect(user_name = remote_user_name, 
+                                                              ip_address = remote_ip_address,
+                                                              port = remote_port, pwd = remote_pwd)
+        
+        if self.handle:
+            self.execute(cmd= "\r",prompt= "\$|>|#",timeout= 10)
+            self.execute(cmd= "SET CYGWIN=notty",prompt= "\$|>|#",timeout= 10)
+            self.execute(cmd= "\r",prompt= "\$|>|#",timeout= 10)
+            main.log.info("ssh "+self.vm_user_name+'@'+self.vm_ip_address)
+            self.execute(cmd= "ssh "+self.vm_user_name+'@'+self.vm_ip_address,prompt= "(.*)",timeout= 10)
+            self.execute(cmd= "\r",prompt= "assword:",timeout= 10)
+            self.execute(cmd = self.vm_pwd,prompt = "\$",timeout = 10)
+            
+            return self.handle
+        else :
+            return main.FALSE
diff --git a/TestON/drivers/common/cli/tool/__init__.py b/TestON/drivers/common/cli/tool/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/drivers/common/cli/tool/__init__.py
diff --git a/TestON/drivers/common/cli/tool/dpctlclidriver.py b/TestON/drivers/common/cli/tool/dpctlclidriver.py
new file mode 100644
index 0000000..3ad5bba
--- /dev/null
+++ b/TestON/drivers/common/cli/tool/dpctlclidriver.py
@@ -0,0 +1,245 @@
+#/usr/bin/env python
+'''
+Created on 26-Nov-2012
+       
+@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+
+DPCTL driver class provides the basic functions of DPCTL controller
+'''
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys
+from drivers.common.cli.toolsdriver import Tools
+import pydoc
+from drivers.common.clidriver import CLI
+import re
+import os
+import sys
+
+class DpctlCliDriver(Tools):
+    '''
+     DpctlCliDriver driver class provides the basic functions of DPCTL controller
+    '''
+    def __init__(self):
+        super(DpctlCliDriver, self).__init__()
+        self.handle = self
+        self.wrapped = sys.modules[__name__]
+    
+    def connect(self,**connectargs):
+        
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]       
+        
+        self.name = self.options['name']
+        
+        self.handle = super(DpctlCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = None, pwd = self.pwd)
+        if self.handle :
+            main.log.info("Connected to the host")
+            return main.TRUE
+        else :
+            main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address)
+            return main.FALSE 
+
+    def addFlow(self,**flowParameters):
+        '''
+         addFlow create a new flow entry into flow table using "dpctl"
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT","INPORT","ACTION","TIMEOUT"],**flowParameters)
+        cmd = "dpctl add-flow tcp:"
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        timeOut = args["TIMEOUT"] if args["TIMEOUT"] != None else 120
+        cmd = cmd + tcpIP + ":" + tcpPort + " in_port=" + str(args["INPORT"]) + ",idle_timeout=" + str(args["TIMEOUT"]) +",actions=" + args["ACTION"]   
+        response = self.execute(cmd=cmd,prompt="\~\$",timeout=60 )
+        if utilities.assert_matches(expect="openflow",actual=response,onpass="Flow Added Successfully",onfail="Adding Flow Failed!!!"):
+            return main.TRUE
+        else :
+            return main.FALSE
+
+    def showFlow(self,**flowParameters):
+        '''
+         showFlow dumps the flow entries of flow table using "dpctl"
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        command = "dpctl show tcp:" + str(tcpIP) + ":" + str(tcpPort)
+        response = self.execute(cmd=command,prompt="get_config_reply",timeout=240)
+        if utilities.assert_matches(expect='features_reply',actual=response,onpass="Show flow executed",onfail="Show flow execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+    def dumpFlow(self,**flowParameters):
+        '''
+         dumpFlow  gives installed flow information
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        command = "dpctl dump-flows tcp:" + str(tcpIP) + ":" + str(tcpPort)
+        response = self.execute(cmd=command,prompt="type=",timeout=240)
+        if utilities.assert_matches(expect='stats_reply',actual=response,onpass="Dump flow executed",onfail="Dump flow execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+    
+    def dumpTables(self,**flowParameters):
+        '''
+         dumpTables gives statistics for each of the flow tables used by datapath switch.
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        command = "dpctl dump-tables tcp:" + str(tcpIP) + ":" + str(tcpPort)
+        response = self.execute(cmd=command,prompt="matched",timeout=240)
+        if utilities.assert_matches(expect='lookup=3',actual=response,onpass="Dump Tables executed",onfail="Dump Tables execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+         
+    def dumpPorts(self,**flowParameters):
+        '''
+         dumpPorts gives ports information
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        command = "dpctl dump-ports tcp:" + str(tcpIP) + ":" + str(tcpPort)
+        response = self.execute(cmd=command,prompt="rx pkts",timeout=240)
+        if utilities.assert_matches(expect='ports',actual=response,onpass="Dump Ports executed",onfail="Dump Ports execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+
+    def dumpAggregate(self,**flowParameters):
+        '''
+         dumpAggregate  gives installed flow information.ggregate statistics for flows in datapath WITCH's tables that match flows.
+         If flows is omitted, the statistics are aggregated across all flows in the datapath's flow tables
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT","FLOW"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        flow = args["FLOW"] if args["FLOW"] != None else ""
+        command = "dpctl dump-aggregate tcp:" + str(tcpIP) + ":" + str(tcpPort) + " " + str (flow)
+        response = self.execute(cmd=command,prompt="flow_count=",timeout=240)
+        if utilities.assert_matches(expect='stats_reply',actual=response,onpass="Dump Aggregate executed",onfail="Dump Aggregate execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+    def delFlow(self,**flowParameters):
+        '''
+         delFlow Deletes entries from the datapath switch's tables that match flow
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT","FLOW"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        flow = args["FLOW"] if args["FLOW"] != None else ""
+        command = "dpctl del-flows tcp:" + str(tcpIP) + ":" + str(tcpPort) + " " +str(flow)
+        response = self.execute(cmd=command,prompt="ETH-Tutorial",timeout=240)
+        if utilities.assert_matches(expect='@',actual=response,onpass="Delete flow executed",onfail="Delete flow execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+    def show(self,**flowParameters):
+        '''
+         show gives information on datapath switch including information on its flow tables and ports.
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        command = "dpctl show tcp:" + str(tcpIP) + ":" + str(tcpPort)
+        response = self.execute(cmd=command,prompt="miss_send_len=",timeout=240)
+        if utilities.assert_matches(expect='get_config_reply',actual=response,onpass="show command executed",onfail="show command execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+    def showStatus(self,**flowParameters):
+        '''
+         showStatus gives a series of key-value pairs that report the status of switch. 
+         If key is specified, only the key-value pairs whose key names begin with key are printed. 
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT","KEY"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        key = args["KEY"] if args["KEY"] != None else ""
+        command = "dpctl status tcp:" + str(tcpIP) + ":" + str(tcpPort) + " " + key
+        response = self.execute(cmd=command,prompt="(.*)",timeout=240)
+        if utilities.assert_matches(expect='(.*)',actual=response,onpass="show command executed",onfail="show command execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+    def desc_set(self,**flowParameters):
+        '''
+         desc_set Sets the switch description (as returned in ofp_desc_stats) to string (max length is DESC_STR_LEN)
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT","STRING"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        string = " " + args["STRING"] if args["STRING"] != None else " DESC_STR_LEN"
+        command = "dpctl desc tcp:" + str(tcpIP) + ":" + str(tcpPort) + str(string)
+        response = self.execute(cmd=command,prompt="ETH-Tutorial",timeout=240)
+        if utilities.assert_matches(expect='@',actual=response,onpass="desc command executed",onfail="desc command execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+    def dumpDesc(self,**flowParameters):
+        '''
+         dumpDesc Sets the switch description (as returned in ofp_desc_stats) to string (max length is DESC_STR_LEN)
+        '''
+        args = utilities.parse_args(["TCPIP","TCPPORT","STRING"],**flowParameters)
+        tcpIP = args["TCPIP"] if args["TCPIP"] != None else "127.0.0.1"
+        tcpPort = args["TCPPORT"] if args["TCPPORT"] != None else "6634"
+        command = "dpctl dump-desc tcp:" + str(tcpIP) + ":" + str(tcpPort) 
+        response = self.execute(cmd=command,prompt="Serial Num:",timeout=240)
+        if utilities.assert_matches(expect='stats_reply',actual=response,onpass="desc command executed",onfail="desc command execution Failed"):
+            main.last_result = main.TRUE
+            return main.TRUE
+        else :
+            main.last_result = main.FALSE
+            return main.FALSE
+
+if __name__ != "__main__":
+    import sys
+    sys.modules[__name__] = DpctlCliDriver()
diff --git a/TestON/drivers/common/cli/toolsdriver.py b/TestON/drivers/common/cli/toolsdriver.py
new file mode 100644
index 0000000..2c165f9
--- /dev/null
+++ b/TestON/drivers/common/cli/toolsdriver.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+'''
+Created on 26-Nov-2012
+
+@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+'''  
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys
+sys.path.append("../")
+from drivers.common.clidriver import CLI
+
+
+class Tools(CLI):
+    # The common functions for Tools included in toolsdriver
+    def __init__(self):
+        super(CLI, self).__init__()
diff --git a/TestON/drivers/common/cli/zookeeperclidriver.py b/TestON/drivers/common/cli/zookeeperclidriver.py
new file mode 100644
index 0000000..60ac65e
--- /dev/null
+++ b/TestON/drivers/common/cli/zookeeperclidriver.py
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+'''
+Created on 31-May-2013
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.        
+
+
+ZookeeperCliDriver is the basic driver which will handle the Zookeeper functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import core.teston
+import time
+
+sys.path.append("../")
+from drivers.common.clidriver import CLI
+
+class ZookeeperCliDriver(CLI):
+    '''
+        ZookeeperCliDriver is the basic driver which will handle the Zookeeper's functions
+    '''
+    def __init__(self):
+        super(CLI, self).__init__()
+        self.handle = self
+        self.wrapped = sys.modules[__name__]
+
+    def connect(self, **connectargs):
+        # Here the main is the TestON instance after creating all the log handles.
+        self.port = None
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]       
+        
+        self.name = self.options['name']
+        self.handle = super(ZookeeperCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+        
+        self.ssh_handle = self.handle
+        if self.handle :
+            self.start()
+            return main.TRUE
+        else :
+            main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address) 
+            main.log.error("Failed to connect to the Onos system")
+            return main.FALSE
+   
+ 
+    def start(self):
+        ''' This Function will start the Zookeeper'''
+        main.log.info( "Starting Zookeeper" )
+        self.handle.sendline("")
+        self.handle.expect("\$")
+        self.handle.sendline("~/zookeeper-3.4.5/bin/zkServer.sh start")
+        self.handle.expect("zkServer.sh start") 
+        self.handle.expect("\$")
+        response = self.handle.before + self.handle.after 
+        if re.search("STARTED", response):
+            main.log.info("Zookeeper Started ")
+            return main.TRUE
+        elif re.search("running", response):
+            main.log.warn("zookeeper ... already running")
+        else:
+            main.log.error("Failed to start Zookeeper"+ response)
+            return main.FALSE
+        
+    def status(self):
+        '''This Function will return the Status of the Zookeeper '''
+        time.sleep(5)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        response = self.execute(cmd="~/zookeeper-3.4.5/bin/zkServer.sh status ",prompt="JMX",timeout=10)
+        
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        return response
+        
+    def stop(self):
+        '''This Function will stop the Zookeeper if it is Running''' 
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        time.sleep(5)
+        response = self.execute(cmd="~/zookeeper-3.4.5/bin/zkServer.sh stop ",prompt="STOPPED",timeout=10)
+        self.execute(cmd="\r",prompt="\$",timeout=10)
+        if re.search("STOPPED",response):
+            main.log.info("Zookeeper Stopped")
+            return main.TRUE
+        else:
+            main.log.warn("No zookeeper to stop")
+            return main.FALSE
+            
+    def disconnect(self):
+        
+        response = ''
+        if self.handle:
+            self.handle.sendline("exit")
+            self.handle.expect("closed")
+        else :
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        return response 
+
+    def isup(self):
+        self.execute(cmd="\n",prompt="\$",timeout=10)
+        response = self.execute(cmd="~/zookeeper-3.4.5/bin/zkServer.sh status ",prompt="Mode",timeout=10)
+        pattern = '(.*)Mode(.*)'
+        if re.search(pattern, response):  
+            return main.TRUE
+        else:
+            return main.FALSE
+
+
diff --git a/TestON/drivers/common/clidriver.py b/TestON/drivers/common/clidriver.py
new file mode 100644
index 0000000..0406e48
--- /dev/null
+++ b/TestON/drivers/common/clidriver.py
@@ -0,0 +1,218 @@
+#!/usr/bin/env python
+'''
+Created on 24-Oct-2012
+    
+@authors: Anil Kumar (anilkumar.s@paxterrasolutions.com),
+          Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+          
+'''
+import pexpect
+import struct, fcntl, os, sys, signal
+import sys, re
+sys.path.append("../")
+
+from drivers.component import Component
+class CLI(Component):
+    '''
+        This will define common functions for CLI included.
+    '''
+    def __init__(self):
+        super(Component, self).__init__()
+        
+    def connect(self,**connectargs):
+        '''
+           Connection will establish to the remote host using ssh.
+           It will take user_name ,ip_address and password as arguments<br>
+           and will return the handle. 
+        '''
+        for key in connectargs:
+            vars(self)[key] = connectargs[key]
+
+        connect_result = super(CLI, self).connect()
+        ssh_newkey = 'Are you sure you want to continue connecting'
+        refused = "ssh: connect to host "+self.ip_address+" port 22: Connection refused"
+        if self.port:
+            self.handle =pexpect.spawn('ssh -p '+self.port+' '+self.user_name+'@'+self.ip_address,maxread=50000)
+        else :
+            self.handle =pexpect.spawn('ssh -X '+self.user_name+'@'+self.ip_address,maxread=50000)
+
+        self.handle.logfile = self.logfile_handler
+        i=self.handle.expect([ssh_newkey,'password:',pexpect.EOF,pexpect.TIMEOUT,refused,'>|#|$'],120)
+
+        if i==0:
+            main.log.info("ssh key confirmation received, send yes")
+            self.handle.sendline('yes')
+            i=self.handle.expect([ssh_newkey,'password:',pexpect.EOF])
+        if i==1:
+            main.log.info("ssh connection asked for password, gave password")
+            self.handle.sendline(self.pwd)
+            self.handle.expect('>|#|$')
+
+        elif i==2:
+            main.log.error("Connection timeout")
+            return main.FALSE
+        elif i==3: #timeout
+            main.log.error("No route to the Host "+self.user_name+"@"+self.ip_address)
+            return main.FALSE
+        elif i==4:
+            main.log.error("ssh: connect to host "+self.ip_address+" port 22: Connection refused")
+            return main.FALSE
+        elif i==5:
+            main.log.info("Password not required logged in")
+
+        self.handle.sendline("\r")
+        self.handle.expect('>|#|$', 2)
+        return self.handle
+
+    
+    def disconnect(self):
+        result = super(CLI, self).disconnect(self)
+        result = main.TRUE
+        #self.execute(cmd="exit",timeout=120,prompt="(.*)")
+    
+    
+    def execute(self, **execparams):
+        '''
+        It facilitates the command line execution of a given command. It has arguments as :
+        cmd => represents command to be executed,
+        prompt => represents expect command prompt or output,
+        timeout => timeout for command execution,
+        more => to provide a key press if it is on.
+
+        It will return output of command exection.
+        '''
+
+        result = super(CLI, self).execute(self)
+        defaultPrompt = '.*[$>\#]'
+        args = utilities.parse_args(["CMD", "TIMEOUT", "PROMPT", "MORE"], **execparams)
+        expectPrompt = args["PROMPT"] if args["PROMPT"] else defaultPrompt
+        self.LASTRSP = ""
+        timeoutVar = args["TIMEOUT"] if args["TIMEOUT"] else 10
+        cmd = ''
+        if args["CMD"]:
+            cmd = args["CMD"]
+        else :
+            return 0
+        if args["MORE"] == None:
+            args["MORE"] = " "
+        self.handle.sendline(cmd)
+        self.lastCommand = cmd
+        index = self.handle.expect([expectPrompt, "--More--", 'Command not found.', pexpect.TIMEOUT,"^:$"], timeout = timeoutVar)
+        if index == 0:
+            self.LASTRSP = self.LASTRSP + self.handle.before + self.handle.after
+            main.log.info("Executed :"+str(cmd)+" \t\t Expected Prompt '"+ str(expectPrompt)+"' Found")
+        elif index == 1:
+            self.LASTRSP = self.LASTRSP + self.handle.before
+            self.handle.send(args["MORE"])
+            main.log.info("Found More screen to go , Sending a key to proceed")
+            indexMore = self.handle.expect(["--More--", expectPrompt], timeout = timeoutVar)
+            while indexMore == 0:
+                main.log.info("Found anoother More screen to go , Sending a key to proceed")
+                self.handle.send(args["MORE"])
+                indexMore = self.handle.expect(["--More--", expectPrompt], timeout = timeoutVar)
+                self.LASTRSP = self.LASTRSP + self.handle.before
+        elif index ==2:
+            main.log.error("Command not found")
+            self.LASTRSP = self.LASTRSP + self.handle.before
+        elif index ==3:
+            main.log.error("Expected Prompt not found , Time Out!!") 
+            main.log.error( expectPrompt ) 
+            return "Expected Prompt not found , Time Out!!"
+        
+        elif index == 4:
+            self.LASTRSP = self.LASTRSP + self.handle.before
+            #self.handle.send(args["MORE"])
+            self.handle.sendcontrol("D")
+            main.log.info("Found More screen to go , Sending a key to proceed")
+            indexMore = self.handle.expect(["^:$", expectPrompt], timeout = timeoutVar)
+            while indexMore == 0:
+                main.log.info("Found anoother More screen to go , Sending a key to proceed")
+                self.handle.sendcontrol("D")
+                indexMore = self.handle.expect(["^:$", expectPrompt], timeout = timeoutVar)
+                self.LASTRSP = self.LASTRSP + self.handle.before
+        
+        main.last_response = self.remove_contol_chars(self.LASTRSP)
+        return self.LASTRSP
+    
+    def remove_contol_chars(self,response):
+        #RE_XML_ILLEGAL = '([\u0000-\u0008\u000b-\u000c\u000e-\u001f\ufffe-\uffff])|([%s-%s][^%s-%s])|([^%s-%s][%s-%s])|([%s-%s]$)|(^[%s-%s])'%(unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff))  
+        #response = re.sub(RE_XML_ILLEGAL, "\n", response) 
+        response = re.sub(r"[\x01-\x1F\x7F]", "", response)
+        #response = re.sub(r"\[\d+\;1H", "\n", response)
+        response = re.sub(r"\[\d+\;\d+H", "", response)
+        return response
+        
+    def runAsSudoUser(self,handle,pwd,default):
+        
+        i = handle.expect([".ssword:*",default, pexpect.EOF])
+        if i==0:
+            handle.sendline(pwd)
+            handle.sendline("\r")
+
+        if i==1:
+            handle.expect(default)
+        
+        if i==2:
+            main.log.error("Unable to run as Sudo user")
+            
+        return handle
+        
+    def onfail(self):
+        if main.componentDictionary[self.name].has_key('onfail'):
+            commandList = main.componentDictionary[self.name]['onfail'].split(",")
+            for command in commandList :
+                response = self.execute(cmd=command,prompt="(.*)",timeout=120)
+
+    def secureCopy(self,user_name, ip_address,filepath, pwd,dst_path):
+        
+        #scp openflow@192.168.56.101:/home/openflow/sample /home/paxterra/Desktop/
+
+        '''
+           Connection will establish to the remote host using ssh.
+           It will take user_name ,ip_address and password as arguments<br>
+           and will return the handle. 
+        '''
+        ssh_newkey = 'Are you sure you want to continue connecting'
+        refused = "ssh: connect to host "+ip_address+" port 22: Connection refused"
+        self.handle =pexpect.spawn('scp '+user_name+'@'+ip_address+':'+filepath+' '+dst_path)
+        i=self.handle.expect([ssh_newkey,'password:',pexpect.EOF,pexpect.TIMEOUT,refused],120)
+        
+        if i==0:    
+            main.log.info("ssh key confirmation received, send yes")
+            self.handle.sendline('yes')
+            i=self.handle.expect([ssh_newkey,'password:',pexpect.EOF])
+        if i==1:
+            main.log.info("ssh connection asked for password, gave password")
+            self.handle.sendline(pwd)
+            #self.handle.expect(user_name)
+            
+        elif i==2:
+            main.log.error("Connection timeout")
+            pass
+        elif i==3: #timeout
+            main.log.error("No route to the Host "+user_name+"@"+ip_address)
+            return main.FALSE
+        elif i==4:
+            main.log.error("ssh: connect to host "+ip_address+" port 22: Connection refused")
+            return main.FALSE
+
+        self.handle.sendline("\r")
+        
+        return self.handle
+    
diff --git a/TestON/drivers/component.py b/TestON/drivers/component.py
new file mode 100644
index 0000000..ec94283
--- /dev/null
+++ b/TestON/drivers/component.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+import logging
+'''
+Created on 24-Oct-2012
+    
+@authors: Anil Kumar (anilkumar.s@paxterrasolutions.com),
+          Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
+
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+          
+'''
+
+import re
+from logging import Logger
+
+class Component(object):
+    '''
+    This is the tempalte class for components
+    '''
+    def __init__(self):
+        self.default = ''
+        self.wrapped = sys.modules[__name__]
+        
+    def __getattr__(self, name):
+        ''' 
+         This will invoke, if the attribute wasn't found the usual ways.
+          Here it will look for assert_attribute and will execute when AttributeError occurs.
+          It will return the result of the assert_attribute.
+        '''
+        try:
+            return getattr(self.wrapped, name)
+        except AttributeError:
+            try:
+                def experimentHandling(**kwargs):
+                    if main.EXPERIMENTAL_MODE == main.TRUE:
+                        result = self.experimentRun(**kwargs)
+                        main.log.info("EXPERIMENTAL MODE. API "+str(name)+" not yet implemented. Returning dummy values")
+                        return result 
+                    else:
+                        return main.FALSE
+                return experimentHandling
+            except TypeError,e:
+                main.log.error("Arguments for experimental mode does not have key 'retruns'" + e)
+        
+        
+    def connect(self):
+        
+        vars(main)[self.name+'log'] = logging.getLogger(self.name)
+                    
+        session_file = main.logdir+"/"+self.name+".session"
+        self.log_handler = logging.FileHandler(session_file)
+        self.log_handler.setLevel(logging.DEBUG)
+            
+        vars(main)[self.name+'log'].setLevel(logging.DEBUG)
+        _formatter = logging.Formatter("%(asctime)s  %(name)-10s: %(levelname)-8s: %(message)s")
+        self.log_handler.setFormatter(_formatter)
+        vars(main)[self.name+'log'].addHandler(self.log_handler)
+        # Adding header for the component log     
+        vars(main)[self.name+'log'].info(main.logHeader)
+        # Opening the session log to append command's execution output
+        self.logfile_handler = open(session_file,"a")
+        
+        return "Dummy"
+    
+    def execute(self,cmd):
+        return main.TRUE
+        #import commands
+        #return commands.getoutput(cmd)
+        
+    def disconnect(self):
+        return main.TRUE 
+    
+    def config(self):
+        self = self
+        # Need to update the configuration code
+        
+    def cleanup(self):
+        return main.TRUE
+    
+    def log(self,message):
+        '''
+        Here finding the for the component to which the 
+        log message based on the called child object.
+        '''
+        vars(main)[self.name+'log'].info("\n"+message+"\n")
+        
+    def close_log_handles(self) :
+        vars(main)[self.name+'log'].removeHandler(self.log_handler)
+        if self.logfile_handler:
+            self.logfile_handler.close()
+    
+    def get_version(self):
+        return "Version unknown"
+
+    def experimentRun(self,**kwargs):
+        args = utilities.parse_args(["RETURNS"],**kwargs)
+        return  args["RETURNS"]    
+
+
+if __name__ != "__main__":
+    import sys
+    sys.modules[__name__] = Component()