diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index 369de0a..6fcd2d8 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -55,7 +55,7 @@
 
     def __init__(self, tests, instance = 0, num_instances = 1, ctlr_ip = None,
                  name = '', image = IMAGE, prefix = '', tag = 'candidate',
-                 env = None, rm = False, update = False):
+                 env = None, rm = False, update = False, network = None):
         self.tests = tests
         self.ctlr_ip = ctlr_ip
         self.rm = rm
@@ -92,6 +92,8 @@
             print('Starting test container %s, image %s, tag %s' %(self.name, self.image, self.tag))
             self.start(rm = False, volumes = volumes, environment = env,
                        host_config = host_config, tty = True)
+            if network is not None:
+                Container.connect_to_network(self.name, network)
 
     def execute_switch(self, cmd, shell = False):
         if self.olt:
@@ -434,7 +436,7 @@
         data_volume = '{}-data'.format(Onos.NAME) if test_manifest.shared_volume else None
         onos = Onos(image = Onos.IMAGE,
                     tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode,
-                    data_volume = data_volume, async = async_mode)
+                    data_volume = data_volume, async = async_mode, network = test_manifest.docker_network)
         if onos.running:
             onos_ips.append(onos.ipaddr)
     else:
@@ -450,7 +452,7 @@
             quagga_config = Onos.get_quagga_config(i)
             onos = Onos(name = name, image = Onos.IMAGE, tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode,
                         data_volume = data_volume, async = async_mode,
-                        quagga_config = quagga_config)
+                        quagga_config = quagga_config, network = test_manifest.docker_network)
             onos_instances.append(onos)
             if onos.running:
                 onos_ips.append(onos.ipaddr)
@@ -487,14 +489,16 @@
 
     if radius_ip is None:
         ##Start Radius container
-        radius = Radius(prefix = Container.IMAGE_PREFIX, update = update_map['radius'])
+        radius = Radius(prefix = Container.IMAGE_PREFIX, update = update_map['radius'],
+                        network = test_manifest.docker_network)
         radius_ip = radius.ip()
 
     print('Radius server running with IP %s' %radius_ip)
 
     if args.quagga == True:
         #Start quagga. Builds container if required
-        quagga = Quagga(prefix = Container.IMAGE_PREFIX, update = update_map['quagga'])
+        quagga = Quagga(prefix = Container.IMAGE_PREFIX, update = update_map['quagga'],
+                        network = test_manifest.docker_network)
 
     try:
         maas_api_key = FabricMAAS.get_api_key()
@@ -550,7 +554,8 @@
                               tag = nose_cnt['tag'],
                               env = test_cnt_env,
                               rm = False if args.keep else True,
-                              update = update_map['test'])
+                              update = update_map['test'],
+                              network = test_manifest.docker_network)
         test_slice_start = test_slice_end
         test_slice_end = test_slice_start + tests_per_container
         update_map['test'] = False
@@ -586,7 +591,8 @@
                               tag = nose_cnt['tag'],
                               env = test_cnt_env,
                               rm = False if args.keep else True,
-                              update = update_map['test'])
+                              update = update_map['test'],
+                              network = test_manifest.docker_network)
         if test_cnt.create and (test_manifest.start_switch or not test_manifest.olt):
             #For non parallel tests, we just restart the switch also for OLT's
             CordTester.switch_on_olt = False
@@ -690,7 +696,7 @@
     if onos_ip is None:
         data_volume = '{}-data'.format(Onos.NAME) if test_manifest.shared_volume else None
         onos = Onos(image = Onos.IMAGE, tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode,
-                    data_volume = data_volume, async = async_mode)
+                    data_volume = data_volume, async = async_mode, network = test_manifest.docker_network)
         if onos.running:
             onos_ips.append(onos.ipaddr)
     else:
@@ -706,7 +712,7 @@
             quagga_config = Onos.get_quagga_config(i)
             onos = Onos(name = name, image = Onos.IMAGE, tag = Onos.TAG, boot_delay = 60, cluster = cluster_mode,
                         data_volume = data_volume, async = async_mode,
-                        quagga_config = quagga_config)
+                        quagga_config = quagga_config, network = test_manifest.docker_network)
             onos_instances.append(onos)
             if onos.running:
                 onos_ips.append(onos.ipaddr)
@@ -734,14 +740,16 @@
 
     ##Start Radius container if not started
     if radius_ip is None:
-        radius = Radius(prefix = Container.IMAGE_PREFIX, update = update_map['radius'])
+        radius = Radius(prefix = Container.IMAGE_PREFIX, update = update_map['radius'],
+                        network = test_manifest.docker_network)
         radius_ip = radius.ip()
 
     print('Radius server running with IP %s' %radius_ip)
 
     if args.quagga == True:
         #Start quagga. Builds container if required
-        quagga = Quagga(prefix = Container.IMAGE_PREFIX, update = update_map['quagga'])
+        quagga = Quagga(prefix = Container.IMAGE_PREFIX, update = update_map['quagga'],
+                        network = test_manifest.docker_network)
         print('Quagga started')
 
     params = args.server.split(':')
@@ -785,7 +793,8 @@
                               tag = nose_cnt['tag'],
                               env = test_cnt_env,
                               rm = False,
-                              update = update_map['test'])
+                              update = update_map['test'],
+                              network = test_manifest.docker_network)
 
         if test_manifest.start_switch or not test_manifest.olt:
             test_cnt.start_switch()
diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index 2c57823..908ef1b 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -24,6 +24,7 @@
 from itertools import chain
 from nsenter import Namespace
 from docker import Client
+from docker import utils as dockerutils
 from shutil import rmtree
 from OnosCtrl import OnosCtrl
 from OnosLog import OnosLog
@@ -103,6 +104,22 @@
         return cls.dckr.create_host_config(binds = binds, port_bindings = port_bindings, privileged = privileged)
 
     @classmethod
+    def connect_to_network(cls, name, network):
+        try:
+            cls.dckr.connect_container_to_network(name, network)
+            return True
+        except:
+            return False
+
+    @classmethod
+    def create_network(cls, network, subnet = None, gateway = None):
+        ipam_config = None
+        if subnet is not None and gateway is not None:
+            ipam_pool = dockerutils.create_ipam_pool(subnet = subnet, gateway = gateway)
+            ipam_config = dockerutils.create_ipam_config(pool_configs = [ipam_pool])
+        cls.dckr.create_network(network, driver='bridge', ipam = ipam_config)
+
+    @classmethod
     def cleanup(cls, image):
         cnt_list = filter(lambda c: c['Image'] == image, cls.dckr.containers(all=True))
         for cnt in cnt_list:
@@ -435,7 +452,8 @@
 
     def __init__(self, name = NAME, image = IMAGE, prefix = PREFIX, tag = TAG,
                  boot_delay = 20, restart = False, network_cfg = None,
-                 cluster = False, data_volume = None, async = False, quagga_config = None):
+                 cluster = False, data_volume = None, async = False, quagga_config = None,
+                 network = None):
         if restart is True:
             ##Find the right image to restart
             running_image = filter(lambda c: c['Names'][0] == '/{}'.format(name), self.dckr.containers())
@@ -734,7 +752,7 @@
     NAME = 'cord-radius'
 
     def __init__(self, name = NAME, image = IMAGE, prefix = '', tag = 'candidate',
-                 boot_delay = 10, restart = False, update = False):
+                 boot_delay = 10, restart = False, update = False, network = None):
         super(Radius, self).__init__(name, image, prefix = prefix, tag = tag, command = self.start_command)
         if update is True or not self.img_exists():
             self.build_image(self.image_name)
@@ -750,6 +768,8 @@
             self.start(ports = self.ports, environment = self.env,
                        volumes = volumes,
                        host_config = host_config, tty = True)
+            if network is not None:
+                Container.connect_to_network(self.name, network)
             time.sleep(boot_delay)
 
     @classmethod
@@ -781,7 +801,8 @@
     NAME = 'cord-quagga'
 
     def __init__(self, name = NAME, image = IMAGE, prefix = '', tag = 'candidate',
-                 boot_delay = 15, restart = False, config_file = quagga_config_file, update = False):
+                 boot_delay = 15, restart = False, config_file = quagga_config_file, update = False,
+                 network = None):
         super(Quagga, self).__init__(name, image, prefix = prefix, tag = tag, quagga_config = self.QUAGGA_CONFIG)
         if update is True or not self.img_exists():
             self.build_image(self.image_name)
@@ -798,6 +819,8 @@
             self.start(ports = self.ports,
                        host_config = host_config,
                        volumes = volumes, tty = True)
+            if network is not None:
+                Container.connect_to_network(self.name, network)
             print('Starting Quagga on container %s' %self.name)
             self.execute('{0}/start.sh {1}'.format(self.guest_quagga_config, config_file))
             time.sleep(boot_delay)
diff --git a/src/test/utils/TestManifest.py b/src/test/utils/TestManifest.py
index 78b01e1..74a95f6 100644
--- a/src/test/utils/TestManifest.py
+++ b/src/test/utils/TestManifest.py
@@ -35,6 +35,7 @@
             self.start_switch = args.start_switch
             self.image_prefix = args.prefix
             self.onos_image = args.onos
+            self.docker_network = None
             self.iterations = None
             self.server = '{}:{}'.format(CORD_TEST_HOST, CORD_TEST_PORT)
             self.jvm_heap_size = args.jvm_heap_size if args.jvm_heap_size else None
@@ -52,6 +53,7 @@
             self.start_switch = data.get('start_switch', self.olt)
             self.image_prefix = data.get('image_prefix', '')
             self.onos_image = data.get('onos_image', 'onosproject/onos:latest')
+            self.docker_network = data.get('docker_network', None)
             self.server = data.get('test_server', '{}:{}'.format(CORD_TEST_HOST, CORD_TEST_PORT))
             self.iterations = data.get('iterations', None)
             self.jvm_heap_size = data.get('jvm_heap_size', None)
