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/setup/cord-test.py b/src/test/setup/cord-test.py
index 2214584..a8ef412 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -28,7 +28,7 @@
     sandbox_setup = '/root/test/src/test/setup'
     tester_base = os.path.dirname(os.path.realpath(__file__))
     tester_paths = os.path.realpath(__file__).split(os.path.sep)
-    tester_path_index = tester_paths.index('cord-tester')
+    tester_path_index = tester_paths.index('src') - 1
     sandbox_host = os.path.sep.join(tester_paths[:tester_path_index+1])
 
     host_guest_map = ( (sandbox_host, sandbox),
@@ -170,6 +170,26 @@
 RUN apt-get -y install arping
 RUN mv /usr/sbin/tcpdump /sbin/
 RUN ln -sf /sbin/tcpdump /usr/sbin/tcpdump
+RUN apt-get install -y git-core autoconf automake autotools-dev pkg-config \
+                        make gcc g++ libtool libc6-dev cmake libpcap-dev libxerces-c2-dev  \
+                        unzip libpcre3-dev flex bison libboost-dev
+WORKDIR /root
+RUN wget -nc http://de.archive.ubuntu.com/ubuntu/pool/main/b/bison/bison_2.5.dfsg-2.1_amd64.deb \
+         http://de.archive.ubuntu.com/ubuntu/pool/main/b/bison/libbison-dev_2.5.dfsg-2.1_amd64.deb
+RUN sudo dpkg -i bison_2.5.dfsg-2.1_amd64.deb libbison-dev_2.5.dfsg-2.1_amd64.deb
+RUN rm bison_2.5.dfsg-2.1_amd64.deb libbison-dev_2.5.dfsg-2.1_amd64.deb
+RUN wget -nc http://www.nbee.org/download/nbeesrc-jan-10-2013.zip && \
+    unzip nbeesrc-jan-10-2013.zip && \
+    cd nbeesrc-jan-10-2013/src && cmake . && make && \
+    cp ../bin/libn*.so /usr/local/lib && ldconfig && \
+    cp -R ../include/* /usr/include/
+WORKDIR /root
+RUN git clone https://github.com/CPqD/ofsoftswitch13.git && \
+    cd ofsoftswitch13 && \
+    git checkout d174464dcc414510990e38426e2e274a25330902 && \
+    ./boot.sh && \
+    ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-ssl && \
+    make && make install
 CMD ["/bin/bash"]
 '''.format(*image_format)
         super(CordTester, cls).build_image(dockerfile, image)
diff --git a/src/test/setup/cpqd.sh b/src/test/setup/cpqd.sh
new file mode 100755
index 0000000..7500fb5
--- /dev/null
+++ b/src/test/setup/cpqd.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+dpid=${1:-001122334455}
+num_ports=${2:-200}
+controller=${3:-$ONOS_CONTROLLER_IP}
+num_ports=$(($num_ports-1))
+my_ip=`ifconfig eth0 | grep "inet addr" | tr -s ' ' | cut -d":" -f2 |cut -d" " -f1`
+if_list="veth1"
+for port in $(seq 3 2 $num_ports); do
+    if_list="$if_list"",""veth$port"
+done
+service openvswitch-switch stop
+nohup ofdatapath --no-slicing --datapath-id=$dpid --interfaces=$if_list ptcp:6653 2>&1 >/tmp/nohup.out &
+nohup ofprotocol tcp:$my_ip:6653 tcp:$controller:6633 2>&1 >/tmp/nohup.out &
diff --git a/src/test/setup/of-bridge-local.sh b/src/test/setup/of-bridge-local.sh
index 114725d..8dfc5ad 100755
--- a/src/test/setup/of-bridge-local.sh
+++ b/src/test/setup/of-bridge-local.sh
@@ -7,6 +7,8 @@
 if [ x"$controller" = "x" ]; then
   controller=$ONOS_CONTROLLER_IP
 fi
+pkill -9 ofdatapath
+pkill -9 ofprotocol
 service openvswitch-switch start
 echo "Configuring ovs bridge $bridge"
 ovs-vsctl del-br $bridge
diff --git a/src/test/setup/olt_config_multitable.json b/src/test/setup/olt_config_multitable.json
new file mode 100644
index 0000000..03066a4
--- /dev/null
+++ b/src/test/setup/olt_config_multitable.json
@@ -0,0 +1,2 @@
+{ "olt" : false , "port_map" : { "port" : "veth0", "num_ports" : 100, "host" : "enp0s8", "start_vlan" : 1000 }, "uplink" : 2, "vlan" : 0 }
+