diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index ae2d336..a409996 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -82,6 +82,7 @@
         olt_conf_file = os.path.join(self.tester_base, 'olt_config.json')
         olt_config = OltConfig(olt_conf_file)
         self.port_map, _ = olt_config.olt_port_map()
+        self.vcpes = olt_config.get_vcpes()
         #Try using the host interface in olt conf to setup the switch
         self.switches = self.port_map['switches']
         if env is not None:
@@ -190,6 +191,44 @@
         if boot_delay:
             time.sleep(boot_delay)
 
+    def setup_vcpes(self, port_num = 0):
+        res = 0
+        for vcpe in self.vcpes:
+            port, s_tag, c_tag = vcpe['port'], vcpe['s_tag'], vcpe['c_tag']
+            if os.access('/sys/class/net/{}'.format(port), os.F_OK):
+                guest_port = 'vcpe{}'.format(port_num)
+                port_num += 1
+                print('Provisioning port %s for %s with s_tag: %d, c_tag: %d\n'
+                      %(guest_port, self.name, s_tag, c_tag))
+                cmd = 'pipework {} -i {} -l {} {} 0.0.0.0/24'.format(port, guest_port, guest_port, self.name)
+                res = os.system(cmd)
+                if res == 0:
+                    vlan_outer_port = '{}.{}'.format(guest_port, s_tag)
+                    vlan_inner_port = '{}.{}'.format(vlan_outer_port, c_tag)
+                    #configure the s_tag/c_tag interfaces inside the guest container
+                    cmds = ('ip link set {} up'.format(guest_port),
+                            'ip link add link {} name {} type vlan id {}'.format(guest_port,
+                                                                                 vlan_outer_port,
+                                                                                 s_tag),
+                            'ip link set {} up'.format(vlan_outer_port),
+                            'ip link add link {} name {} type vlan id {}'.format(vlan_outer_port,
+                                                                                 vlan_inner_port,
+                                                                                 c_tag),
+                            'ip link set {} up'.format(vlan_inner_port),
+                            )
+                    res += self.execute(cmds, shell = True)
+
+    @classmethod
+    def cleanup_vcpes(cls, vcpes):
+        port_num = 0
+        for vcpe in vcpes:
+            port = vcpe['port']
+            if os.access('/sys/class/net/{}'.format(port), os.F_OK):
+                local_port = 'vcpe{}'.format(port_num)
+                cmd = 'ip link del {}'.format(local_port)
+                os.system(cmd)
+                port_num += 1
+
     def setup_intfs(self, port_num = 0):
         tester_intf_subnet = '192.168.100'
         res = 0
@@ -198,6 +237,7 @@
         start_vlan += port_num
         uplink = self.port_map['uplink']
         wan = self.port_map['wan']
+        vcpe_port_num = port_num
         port_list = self.port_map['switch_port_list'] + self.port_map['switch_relay_port_list']
         print('Provisioning the ports for the test container\n')
         for host_intf, ports in port_list:
@@ -221,6 +261,7 @@
                 res += os.system(pipework_cmd)
                 port_num += 1
 
+        self.setup_vcpes(vcpe_port_num)
         return res, port_num
 
     @classmethod
@@ -241,6 +282,7 @@
         olt_conf_file = os.path.join(cls.tester_base, 'olt_config.json')
         olt_config = OltConfig(olt_conf_file)
         port_map, _ = olt_config.olt_port_map()
+        vcpes = olt_config.get_vcpes()
         port_num = 0
         start_vlan = port_map['start_vlan']
         wan = port_map['wan']
@@ -267,6 +309,8 @@
                     res += os.system(cmd)
                 port_num += 1
 
+        cls.cleanup_vcpes(vcpes)
+
     @classmethod
     def get_name(cls, num_instances):
         cnt_name = '/{0}'.format(cls.basename)
diff --git a/src/test/setup/olt_config.json b/src/test/setup/olt_config.json
index 844b4fe..8ad5973 100644
--- a/src/test/setup/olt_config.json
+++ b/src/test/setup/olt_config.json
@@ -1 +1,11 @@
-{ "olt" : false , "port_map" : { "num_ports" : 11, "start_vlan" : 1000, "nr_switches": 1 }, "uplink" : 2, "vlan" : 0 }
+{ "olt" : false,
+  "uplink" : 2,
+  "vlan" : 0,
+  "port_map" : { "num_ports" : 11, "start_vlan" : 1000, "nr_switches": 1 },
+  "vcpe" :
+      [
+        {
+          "port" : "fabric", "s_tag" : 222, "c_tag" : 111
+        }
+      ]
+}
diff --git a/src/test/utils/OltConfig.py b/src/test/utils/OltConfig.py
index acf2339..571ce7e 100644
--- a/src/test/utils/OltConfig.py
+++ b/src/test/utils/OltConfig.py
@@ -130,3 +130,9 @@
             accessDeviceDict['vlan'] = str(self.olt_conf['vlan'])
             return accessDeviceDict
         return None
+
+    def get_vcpes(self):
+        if self.on_olt():
+            if self.olt_conf.has_key('vcpe'):
+                return self.olt_conf['vcpe']
+        return []
