Add test cases to test subscriber multi-table support with ONOS using CPQD and a new ONOS app.
This would verify single channel multiple subscriber joins using cpqd.
ONOS multi-table support was found to be broken with cordmcast.
Hence a new app similar to cordmcast was added to verify if multi-table rules were provisioned with ONOS
cpqd pipeline driver.
Using a different subscriber port per subscriber and provisioning an uplink port to be used
for IGMP traffic, it was found that ONOS cpqd driver fails to provision multi-table flows using group ids.
The subscriberMultiTable tests uses the new cordigmp multitable app to provision multicast flows in ONOS
enabling the spring-open-cpqd pipeline driver with ONOS when using CPQD.

If you want to verify/run the subscriberMultiTable test, first rebuild the test container with cpqd using:
sudo cord-test.py build test
And then run the subscriberMultiTable test: test_subscriber_join_recv using:
cord-test.run run --radius -t subscriberMultiTable:subscriber_exchange.test_subscriber_join_recv -k
diff --git a/src/test/utils/OltConfig.py b/src/test/utils/OltConfig.py
index a9fa3c3..bb78563 100644
--- a/src/test/utils/OltConfig.py
+++ b/src/test/utils/OltConfig.py
@@ -56,6 +56,40 @@
         else:
             return None
 
+    def olt_port_map_multi(self):
+        if self.on_olt() and self.olt_conf.has_key('port_map'):
+            port_map = {}
+            if self.olt_conf['port_map'].has_key('ports'):
+                port_map['ports'] = self.olt_conf['port_map']['ports']
+            else:
+                port_map['ports'] = []
+                num_ports = int(self.olt_conf['port_map']['num_ports'])
+                port_map['port'] = self.olt_conf['port_map']['port']
+                for port in xrange(0, num_ports, 2):
+                    port_map['ports'].append('veth{}'.format(port))
+            port_num = 1
+            port_map['uplink'] = int(self.olt_conf['uplink'])
+            port_list = []
+            ##build the port map and inverse port map
+            for port in port_map['ports']:
+                port_map[port_num] = port
+                port_map[port] = port_num
+                if port_num != port_map['uplink']:
+                    ##create tx,rx map
+                    port_list.append( (port_map['uplink'], port_num ) )
+                port_num += 1
+            port_map['start_vlan'] = 0
+            if self.olt_conf['port_map'].has_key('host'):
+                port_map['host'] = self.olt_conf['port_map']['host']
+            else:
+                port_map['host'] = 'ovsbr0'
+            if self.olt_conf['port_map'].has_key('start_vlan'):
+                port_map['start_vlan'] = int(self.olt_conf['port_map']['start_vlan'])
+
+            return port_map, port_list
+        else:
+            return None, None
+
     def olt_device_data(self):
         if self.on_olt():
             accessDeviceDict = {}