Added files created for SDNIP CHO test
diff --git a/TestON/drivers/common/cli/quaggaclidriver.py b/TestON/drivers/common/cli/quaggaclidriver.py
new file mode 100644
index 0000000..744d284
--- /dev/null
+++ b/TestON/drivers/common/cli/quaggaclidriver.py
@@ -0,0 +1,213 @@
+#!/usr/bin/env python
+
+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 QuaggaCliDriver(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(QuaggaCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+
+        if self.handle: 
+            self.handle.expect("")
+            self.handle.expect("\$")
+            self.handle.sendline("telnet localhost 2605")
+            self.handle.expect("Password:", timeout = 5)
+            self.handle.sendline("hello")
+            self.handle.expect("bgpd",timeout = 5)
+            self.handle.sendline("enable")
+            self.handle.expect("bgpd#", timeout = 5)
+            return self.handle
+        else :
+            main.log.info("NO HANDLE")
+            return main.FALSE
+
+    def enter_config(self, asn):
+        try:
+            self.handle.sendline("")
+            self.handle.expect("bgpd#")
+        except:
+            main.log.warn("Probably not currently in enable mode!")
+            self.disconnect()
+            return main.FALSE
+        self.handle.sendline("configure terminal")
+        self.handle.expect("config", timeout = 5)
+        routerAS = "router bgp " + str(asn)
+        try:
+            self.handle.sendline(routerAS)
+            self.handle.expect("config-router", timeout = 5)
+            return main.TRUE
+        except:
+            return main.FALSE
+    def add_route(self, net, numRoutes, routeRate):
+        try:
+            self.handle.sendline("")
+            self.handle.expect("config-router")
+        except:
+            main.log.warn("Probably not in config-router mode!")
+            self.disconnect()
+        main.log.report("Adding Routes")
+        j=0
+        k=0
+        while numRoutes > 255:
+            numRoutes = numRoutes - 255
+            j = j + 1
+        k = numRoutes % 254
+        routes_added = 0
+        if numRoutes > 255:
+            numRoutes = 255
+        for m in range(1,j+1):
+            for n in range(1, numRoutes+1):
+                network = str(net) + "." + str(m) + "." + str(n) + ".0/24"
+                routeCmd = "network " + network
+                try:
+                    self.handle.sendline(routeCmd)
+                    self.handle.expect("bgpd")
+                except:
+                    main.log.warn("failed to add route")
+                    self.disconnect() 
+                waitTimer = 1.00/routeRate
+                time.sleep(waitTimer)
+                routes_added = routes_added + 1
+        for d in range(j+1,j+2):
+            for e in range(1,k+1):
+                network = str(net) + "." + str(d) + "." + str(e) + ".0/24"
+                routeCmd = "network " + network
+                try:
+                    self.handle.sendline(routeCmd)
+                    self.handle.expect("bgpd")
+                except:
+                    main.log.warn("failed to add route")
+                    self.disconnect
+                waitTimer = 1.00/routeRate
+                time.sleep(waitTimer)
+                routes_added = routes_added + 1
+        if routes_added == numRoutes:
+            return main.TRUE
+        return main.FALSE
+    def del_route(self, net, numRoutes, routeRate):
+        try:
+            self.handle.sendline("")
+            self.handle.expect("config-router")
+        except:
+            main.log.warn("Probably not in config-router mode!")
+            self.disconnect()
+        main.log.report("Deleting Routes")
+        j=0
+        k=0
+        while numRoutes > 255:
+            numRoutes = numRoutes - 255
+            j = j + 1
+        k = numRoutes % 254
+        routes_deleted = 0
+        if numRoutes > 255:
+            numRoutes = 255
+        for m in range(1,j+1):
+            for n in range(1, numRoutes+1):
+                network = str(net) + "." + str(m) + "." + str(n) + ".0/24"
+                routeCmd = "no network " + network
+                try:
+                    self.handle.sendline(routeCmd)
+                    self.handle.expect("bgpd")
+                except:
+                    main.log.warn("Failed to delete route")
+                    self.disconnect()
+                waitTimer = 1.00/routeRate
+                time.sleep(waitTimer)
+                routes_deleted = routes_deleted + 1
+        for d in range(j+1,j+2):
+            for e in range(1,k+1):
+                network = str(net) + "." + str(d) + "." + str(e) + ".0/24"
+                routeCmd = "no network " + network
+                try:
+                    self.handle.sendline(routeCmd)
+                    self.handle.expect("bgpd")
+                except:
+                    main.log.warn("Failed to delete route")
+                    self.disconnect()
+                waitTimer = 1.00/routeRate
+                time.sleep(waitTimer)
+                routes_deleted = routes_deleted + 1
+        if routes_deleted == numRoutes:
+            return main.TRUE
+        return main.FALSE
+    def check_routes(self, brand, ip, user, pw):
+        def pronto(ip, user, passwd):
+            print "Connecting to Pronto switch"
+            child = pexpect.spawn("telnet " + ip)
+            i = child.expect(["login:", "CLI#",pexpect.TIMEOUT])
+            if i == 0:
+                print "Username and password required. Passing login info."
+                child.sendline(user)
+                child.expect("Password:")
+                child.sendline(passwd)
+                child.expect("CLI#")
+            print "Logged in, getting flowtable."
+            child.sendline("flowtable brief")
+            for t in range (9):
+                t2 = 9 - t
+                print "\r" + str(t2)
+                sys.stdout.write("\033[F")
+                time.sleep(1)
+            print "Scanning flowtable"
+            child.expect("Flow table show")
+            count = 0
+            while 1:
+                i = child.expect(['17\d\.\d{1,3}\.\d{1,3}\.\d{1,3}','CLI#',pexpect.TIMEOUT])
+                if i == 0:
+                    count = count + 1
+                elif i == 1:
+                    print "Pronto flows: " + str(count) + "\nDone\n"
+                    break
+                else:
+                    break
+        def cisco(ip,user,passwd):
+            print "Establishing Cisco switch connection"
+            child = pexpect.spawn("ssh " +  user + "@" + ip)
+            i = child.expect(["Password:", "CLI#",pexpect.TIMEOUT])
+            if i == 0:
+                print "Password required. Passing now."
+                child.sendline(passwd)
+                child.expect("#")
+            print "Logged in. Retrieving flow table then counting flows."
+            child.sendline("show openflow switch all flows all")
+            child.expect("Logical Openflow Switch")
+            print "Flow table retrieved. Counting flows"
+            count = 0
+            while 1:
+                i = child.expect(["nw_src=17","#",pexpect.TIMEOUT])
+                if i == 0:
+                    count = count + 1
+                elif i == 1:
+                    print "Cisco flows: " + str(count) + "\nDone\n"
+                    break
+                else:
+                    break
+            if brand == "pronto" or brand == "PRONTO":
+                pronto(ip,user,passwd)
+            #elif brand  == "cisco" or brand == "CISCO":
+            #    cisco(ip,user,passwd) 
+    def disconnect(self):
+        '''
+        Called when Test is complete to disconnect the Quagga handle.  
+        '''
+        response = ''
+        try:
+            self.handle.close()
+        except:
+            main.log.error("Connection failed to the host")
+            response = main.FALSE
+        return response