diff --git a/src/test/acl/aclTest.py b/src/test/acl/aclTest.py
index 79de329..c0c88fe 100644
--- a/src/test/acl/aclTest.py
+++ b/src/test/acl/aclTest.py
@@ -16,7 +16,7 @@
 import unittest
 from nose.tools import *
 from scapy.all import *
-from OnosCtrl import OnosCtrl, get_mac
+from OnosCtrl import OnosCtrl
 from OltConfig import OltConfig
 from OnosFlowCtrl import OnosFlowCtrl
 from onosclidriver import OnosCliDriver
@@ -42,7 +42,7 @@
     ingress_iface = 1
     egress_iface = 2
     MAX_PORTS = 100
-    CURRENT_PORT_NUM = egress_iface 
+    CURRENT_PORT_NUM = egress_iface
     ACL_SRC_IP = '192.168.20.3/32'
     ACL_DST_IP = '192.168.30.2/32'
     ACL_SRC_IP_RULE_2 = '192.168.40.3/32'
@@ -79,7 +79,7 @@
     def tearDown(self):
         '''Deactivate the acl app'''
         log.info('Tear down setup')
-        self.CURRENT_PORT_NUM = 4 
+        self.CURRENT_PORT_NUM = 4
 
     def cliEnter(self):
         retries = 0
@@ -115,12 +115,12 @@
                break
             egress_iface_count += 1
             egress_iface_num += 1
-            
+
 
     @classmethod
     def acl_hosts_remove(cls, egress_iface_count = 1,  egress_iface_num = None):
         if egress_iface_num is None:
-           egress_iface_num = cls.egress_iface  
+           egress_iface_num = cls.egress_iface
         n = 0
         for n in range(egress_iface_count):
            egress = cls.port_map[egress_iface_num]
@@ -246,7 +246,7 @@
         if status is False:
             log.info('JSON request returned status %d' %code)
             assert_equal(status, True)
-        
+
     def test_acl_remove_all_rules_without_add(self):
         status, _ = ACLTest.remove_acl_rule()
         if status is False:
@@ -272,7 +272,7 @@
         if status is False:
             log.info('JSON request returned status %d' %code)
             assert_equal(status, True)
-        
+
     def test_acl_allow_rules_for_matched_dst_ips(self):
         acl_rule = ACLTest()
         status, code = acl_rule.adding_acl_rule('v4', srcIp=self.ACL_SRC_IP, dstIp ='192.168.30.2/24', action = 'allow')
@@ -1152,6 +1152,3 @@
         self.acl_rule_traffic_send_recv(srcMac = srcMac, dstMac = dstMac ,srcIp =self.ACL_SRC_IP, dstIp = self.ACL_DST_IP,ingress =ingress, egress = egress, ip_proto = 'UDP', dstPortNum = 987, positive_test = False)
         self.cliExit()
         self.acl_hosts_remove(egress_iface_count = 2,  egress_iface_num = egress-1)
-
-
-
diff --git a/src/test/cluster/clusterTest.py b/src/test/cluster/clusterTest.py
index 88a9915..ab919a0 100644
--- a/src/test/cluster/clusterTest.py
+++ b/src/test/cluster/clusterTest.py
@@ -15,9 +15,9 @@
 import unittest
 from nose.tools import *
 from scapy.all import *
-from OnosCtrl import OnosCtrl, get_mac
+from OnosCtrl import OnosCtrl
 from OltConfig import OltConfig
-from socket import socket
+from CordTestUtils import get_mac, get_controller, get_controllers
 from OnosFlowCtrl import OnosFlowCtrl
 from nose.twistedtools import reactor, deferred
 from twisted.internet import defer
@@ -75,16 +75,6 @@
         if self._testMethodName not in self.testcaseLoggers:
             super(cluster_exchange, self).tearDown()
 
-    def get_controller(self):
-        controller = os.getenv('ONOS_CONTROLLER_IP') or 'localhost'
-        controller = controller.split(',')[0]
-        return controller
-
-    @classmethod
-    def get_controllers(cls):
-        controllers = os.getenv('ONOS_CONTROLLER_IP') or ''
-        return controllers.split(',')
-
     def cliEnter(self, controller = None):
         retries = 0
         while retries < 30:
@@ -130,7 +120,7 @@
     def get_leaders(self, controller = None):
         result_map = {}
         if controller is None:
-            controller = self.get_controller()
+            controller = get_controller()
         if type(controller) in [ list, tuple ]:
             for c in controller:
                 leaders = self.get_leader(controller = c)
@@ -202,7 +192,7 @@
 
     def get_cluster_container_names_ips(self,controller=None):
         onos_names_ips = {}
-        controllers = self.get_controllers()
+        controllers = get_controllers()
         i = 0
         for controller in controllers:
             if i == 0:
@@ -347,7 +337,7 @@
 	return True
 
     def cluster_controller_restarts(self, graceful = False):
-        controllers = self.get_controllers()
+        controllers = get_controllers()
         ctlr_len = len(controllers)
         if ctlr_len <= 1:
             log.info('ONOS is not running in cluster mode. This test only works for cluster mode')
@@ -446,7 +436,7 @@
 
     def test_cluster_single_controller_restarts(self):
         '''Test the cluster by repeatedly restarting the same controller'''
-        controllers = self.get_controllers()
+        controllers = get_controllers()
         ctlr_len = len(controllers)
         if ctlr_len <= 1:
             log.info('ONOS is not running in cluster mode. This test only works for cluster mode')
@@ -529,7 +519,7 @@
 
     def test_cluster_restarts(self):
         '''Test the cluster by repeatedly restarting the entire cluster'''
-        controllers = self.get_controllers()
+        controllers = get_controllers()
         ctlr_len = len(controllers)
         if ctlr_len <= 1:
             log.info('ONOS is not running in cluster mode. This test only works for cluster mode')
diff --git a/src/test/cordvtn/cordvtnTest.py b/src/test/cordvtn/cordvtnTest.py
index b20d9a1..1c5cf13 100644
--- a/src/test/cordvtn/cordvtnTest.py
+++ b/src/test/cordvtn/cordvtnTest.py
@@ -24,7 +24,8 @@
 from neutronclient.v2_0 import client as neutron_client
 import neutronclient.v2_0.client as neutronclient
 from nose.tools import assert_equal
-from OnosCtrl import OnosCtrl, get_mac
+from CordTestUtils import get_mac
+from OnosCtrl import OnosCtrl
 from CordLogger import CordLogger
 from TestManifest import TestManifest
 from OnosFlowCtrl import OnosFlowCtrl
diff --git a/src/test/dhcprelay/dhcprelayTest.py b/src/test/dhcprelay/dhcprelayTest.py
index 5d00ccf..2cfb4be 100644
--- a/src/test/dhcprelay/dhcprelayTest.py
+++ b/src/test/dhcprelay/dhcprelayTest.py
@@ -21,7 +21,8 @@
 import time
 import os, sys
 from DHCP import DHCPTest
-from OnosCtrl import OnosCtrl, get_mac
+from CordTestUtils import get_mac
+from OnosCtrl import OnosCtrl
 from OltConfig import OltConfig
 from CordTestServer import cord_test_onos_restart
 from CordLogger import CordLogger
@@ -1386,7 +1387,3 @@
 	   log.info('Got dhcp client IP %s from server %s for mac %s.Which is not expected behavior as IP %s is already consumed.'
 		    %(new_cip, new_sip, new_mac, new_cip) )
 	   assert_equal(new_cip, None)
-
-
-
-
diff --git a/src/test/ipv6vrouter/ipv6vrouterTest.py b/src/test/ipv6vrouter/ipv6vrouterTest.py
index 5ac7291..00a7944 100644
--- a/src/test/ipv6vrouter/ipv6vrouterTest.py
+++ b/src/test/ipv6vrouter/ipv6vrouterTest.py
@@ -16,7 +16,8 @@
 import unittest
 from nose.tools import *
 from scapy.all import *
-from OnosCtrl import OnosCtrl, get_mac
+from CordTestUtils import get_mac
+from OnosCtrl import OnosCtrl
 from OltConfig import OltConfig
 from OnosFlowCtrl import OnosFlowCtrl
 from onosclidriver import OnosCliDriver
@@ -773,4 +774,3 @@
         time.sleep(60)
         self.vrouter_traffic_verify(positive_test = True)
         assert_equal(res, True)
-
diff --git a/src/test/proxyarp/proxyarpTest.py b/src/test/proxyarp/proxyarpTest.py
index 594fabc..836cb3b 100644
--- a/src/test/proxyarp/proxyarpTest.py
+++ b/src/test/proxyarp/proxyarpTest.py
@@ -16,7 +16,8 @@
 import unittest
 from nose.tools import *
 from scapy.all import *
-from OnosCtrl import OnosCtrl, get_mac
+from CordTestUtils import get_mac
+from OnosCtrl import OnosCtrl
 from OltConfig import OltConfig
 from OnosFlowCtrl import OnosFlowCtrl
 from onosclidriver import OnosCliDriver
diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index d751124..ac66858 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -22,7 +22,8 @@
 sys.path.append(utils_dir)
 sys.path.append(cli_dir)
 sys.path.insert(1, '/usr/local/lib/python2.7/dist-packages')
-from OnosCtrl import OnosCtrl, get_mac
+from CordTestUtils import get_mac
+from OnosCtrl import OnosCtrl
 from OltConfig import OltConfig
 from OnosFlowCtrl import OnosFlowCtrl
 from threadPool import ThreadPool
diff --git a/src/test/setup/radius-config/freeradius/clients.conf b/src/test/setup/radius-config/freeradius/clients.conf
index 1786abe..c03f512 100644
--- a/src/test/setup/radius-config/freeradius/clients.conf
+++ b/src/test/setup/radius-config/freeradius/clients.conf
@@ -1374,6 +1374,34 @@
 	ipv6addr = ::
 	secret = radius_password
 }
+client 0.0.0.0/0{
+	secret = radius_password
+}
+client ipv6{
+	ipv6addr = ::
+	secret = radius_password
+}
+client 0.0.0.0/0{
+	secret = radius_password
+}
+client ipv6{
+	ipv6addr = ::
+	secret = radius_password
+}
+client 0.0.0.0/0{
+	secret = radius_password
+}
+client ipv6{
+	ipv6addr = ::
+	secret = radius_password
+}
+client 0.0.0.0/0{
+	secret = radius_password
+}
+client ipv6{
+	ipv6addr = ::
+	secret = radius_password
+}
 client localhost {
 	#  Allowed values are:
 	#	dotted quad (1.2.3.4)
diff --git a/src/test/setup/radius-config/freeradius/mods-available/sql b/src/test/setup/radius-config/freeradius/mods-available/sql
index 93e85c1..eea2245 100644
--- a/src/test/setup/radius-config/freeradius/mods-available/sql
+++ b/src/test/setup/radius-config/freeradius/mods-available/sql
@@ -825,6 +825,22 @@
 	sqlite {
 		filename = "/opt/db/radius.sqlite3"
 	}
+ 
+	sqlite {
+		filename = "/opt/db/radius.sqlite3"
+	}
+ 
+	sqlite {
+		filename = "/opt/db/radius.sqlite3"
+	}
+ 
+	sqlite {
+		filename = "/opt/db/radius.sqlite3"
+	}
+ 
+	sqlite {
+		filename = "/opt/db/radius.sqlite3"
+	}
 
 #
 #	Several drivers accept specific options, to set them, a
diff --git a/src/test/utils/ACL.py b/src/test/utils/ACL.py
index 55333c4..b246de1 100644
--- a/src/test/utils/ACL.py
+++ b/src/test/utils/ACL.py
@@ -17,7 +17,8 @@
 import requests
 import os,sys,time
 from scapy.all import *
-from OnosCtrl import OnosCtrl, get_mac, get_controller
+from CordTestUtils import get_mac, get_controller
+from OnosCtrl import OnosCtrl
 from OnosFlowCtrl import OnosFlowCtrl
 log.setLevel('INFO')
 
@@ -137,4 +138,3 @@
         json_data = json.dumps(ports_dict)
         resp = requests.post(self.iface_create_onos_url, auth = self.auth, data = json_data)
         return resp.ok, resp.status_code, egress_host_list
-
diff --git a/src/test/utils/Cluster.py b/src/test/utils/Cluster.py
index b55d4e2..c42ea64 100644
--- a/src/test/utils/Cluster.py
+++ b/src/test/utils/Cluster.py
@@ -7,8 +7,9 @@
 from Channels import Channels, IgmpChannel
 from subscriberDb import SubscriberDB
 import time, monotonic
+from CordTestUtils import get_mac
 from OltConfig import OltConfig
-from OnosCtrl import OnosCtrl, get_mac
+from OnosCtrl import OnosCtrl
 from OnosFlowCtrl import OnosFlowCtrl
 from CordContainer import Container, Onos, Quagga
 from onosclidriver import OnosCliDriver
diff --git a/src/test/utils/CordLogger.py b/src/test/utils/CordLogger.py
index 54d8b11..e58e4ff 100644
--- a/src/test/utils/CordLogger.py
+++ b/src/test/utils/CordLogger.py
@@ -1,7 +1,7 @@
 from OnosLog import OnosLog
 from scapy.all import log
 from onosclidriver import OnosCliDriver
-from OnosCtrl import OnosCtrl, get_mac
+from OnosCtrl import OnosCtrl
 from docker import Client
 from CordContainer import *
 import json
diff --git a/src/test/utils/CordTestUtils.py b/src/test/utils/CordTestUtils.py
new file mode 100644
index 0000000..6abd356
--- /dev/null
+++ b/src/test/utils/CordTestUtils.py
@@ -0,0 +1,45 @@
+import subprocess
+import socket
+import fcntl
+import struct
+import os
+
+# we use subprocess as commands.getstatusoutput would be deprecated
+def getstatusoutput(cmd):
+    command = [ '/bin/sh', '-c', cmd ]
+    p = subprocess.Popen(command, stdout = subprocess.PIPE)
+    out, _ = p.communicate()
+    return p.returncode, out.strip()
+
+def get_ip(iface):
+    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    try:
+        info = fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', bytes(iface[:15])))
+    except:
+        info = None
+    s.close()
+    if info:
+        return '.'.join( [ str(ord(c)) for c in info[20:24] ] )
+    return None
+
+def get_mac(iface = None, pad = 4):
+    if iface is None:
+        iface = os.getenv('TEST_SWITCH', 'ovsbr0')
+    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    try:
+        info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', bytes(iface[:15])))
+    except:
+        info = ['0'] * 24
+    s.close()
+    sep = ''
+    if pad == 0:
+        sep = ':'
+    return '0'*pad + sep.join(['%02x' %ord(char) for char in info[18:24]])
+
+def get_controllers():
+    controllers = os.getenv('ONOS_CONTROLLER_IP') or 'localhost'
+    return controllers.split(',')
+
+def get_controller():
+    controllers = get_controllers()
+    return controllers[0]
diff --git a/src/test/utils/OnosCtrl.py b/src/test/utils/OnosCtrl.py
index 205a31e..07cff87 100644
--- a/src/test/utils/OnosCtrl.py
+++ b/src/test/utils/OnosCtrl.py
@@ -17,26 +17,7 @@
 import requests
 import os,sys,time
 from OltConfig import OltConfig
-import fcntl, socket, struct
-
-def get_mac(iface = None, pad = 4):
-    if iface is None:
-        iface = os.getenv('TEST_SWITCH', 'ovsbr0')
-    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-    try:
-        info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', bytes(iface[:15])))
-    except:
-        info = ['0'] * 24
-    s.close()
-    sep = ''
-    if pad == 0:
-        sep = ':'
-    return '0'*pad + sep.join(['%02x' %ord(char) for char in info[18:24]])
-
-def get_controller():
-    controller = os.getenv('ONOS_CONTROLLER_IP') or 'localhost'
-    controller = controller.split(',')[0]
-    return controller
+from CordTestUtils import get_mac, get_controller
 
 class OnosCtrl:
 
diff --git a/src/test/vrouter/vrouterTest.py b/src/test/vrouter/vrouterTest.py
index 97df637..dc1f281 100644
--- a/src/test/vrouter/vrouterTest.py
+++ b/src/test/vrouter/vrouterTest.py
@@ -16,7 +16,8 @@
 import unittest
 from nose.tools import *
 from scapy.all import *
-from OnosCtrl import OnosCtrl, get_mac
+from CordTestUtils import get_mac
+from OnosCtrl import OnosCtrl
 from OltConfig import OltConfig
 from OnosFlowCtrl import OnosFlowCtrl
 from onosclidriver import OnosCliDriver
diff --git a/src/test/vsg/vsgTest.py b/src/test/vsg/vsgTest.py
index c284b12..7fc720e 100644
--- a/src/test/vsg/vsgTest.py
+++ b/src/test/vsg/vsgTest.py
@@ -15,7 +15,8 @@
 import unittest
 from nose.tools import *
 from scapy.all import *
-from OnosCtrl import OnosCtrl, get_mac
+from CordTestUtils import get_mac, get_controllers
+from OnosCtrl import OnosCtrl
 from OltConfig import OltConfig
 from socket import socket
 from OnosFlowCtrl import OnosFlowCtrl
@@ -53,18 +54,13 @@
 
     def setUp(self):
         super(vsg_exchange, self).setUp()
-        self.controllers = self.get_controllers()
+        self.controllers = get_controllers()
         self.controller = self.controllers[0]
         self.cli = None
 
     def tearDown(self):
         super(vsg_exchange, self).tearDown()
 
-    @classmethod
-    def get_controllers(cls):
-        controllers = os.getenv('ONOS_CONTROLLER_IP') or ''
-        return controllers.split(',')
-
     def cliEnter(self, controller = None):
         retries = 0
         while retries < 30:
