Merge "[ONOS-7579] Investigate FUNCintent failures  - Inconsistently, some of the flows get stuck on Pending_remove after intents get removed. To prevent that, doing purge-intents separately  - Inconsistently, Encapsulation intent install shows different number of flows on each flow. To prevent test to exit for that, instead of looping by the number of flows, it will loop each flows. This way it will still set result as failure if flows don't look correct but keep the test on going."
diff --git a/TestON/JenkinsFile/JenkinsCommonFuncs.groovy b/TestON/JenkinsFile/JenkinsCommonFuncs.groovy
index b6a39b7..578b2d8 100644
--- a/TestON/JenkinsFile/JenkinsCommonFuncs.groovy
+++ b/TestON/JenkinsFile/JenkinsCommonFuncs.groovy
@@ -46,7 +46,8 @@
   print testMachine
 }
 def fabricOn( branch ){
-  return branch == "master" ? '2' : '3'
+  return branch.reverse().take(4).reverse() == "1.13" ? '2' : '3'
+// Temp Fix  return branch.reverse().take(6).reverse() == "master" ? '2' : '3'
 }
 def printType(){
   echo testType;
diff --git a/TestON/JenkinsFile/JenkinsTestONTests.groovy b/TestON/JenkinsFile/JenkinsTestONTests.groovy
index 3ba484b..ac27a0c 100644
--- a/TestON/JenkinsFile/JenkinsTestONTests.groovy
+++ b/TestON/JenkinsFile/JenkinsTestONTests.groovy
@@ -7,12 +7,12 @@
                 "FUNCoptical" :    [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCoptical", wiki_file:"FUNCopticalWiki.txt" ],
                 "FUNCflow" :       [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCflow", wiki_file:"FUNCflowWiki.txt" ],
                 "FUNCnetCfg":      [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCnetCfg", wiki_file:"FUNCnetCfgWiki.txt" ],
-                "FUNCovsdbtest" :  [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCovsdbtestWiki", wiki_file:"FUNCovsdbtestWiki.txt" ],
+                "FUNCovsdbtest" :  [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCovsdbtest", wiki_file:"FUNCovsdbtestWiki.txt" ],
                 "FUNCnetconf" :    [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCnetconf", wiki_file:"FUNCnetconfWiki.txt" ],
                 "FUNCgroup" :      [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCgroup", wiki_file:"FUNCgroupWiki.txt" ],
                 "FUNCintent" :     [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCintent", wiki_file:"FUNCintentWiki.txt" ],
                 "FUNCintentRest" : [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCintentRest", wiki_file:"FUNCintentRestWiki.txt" ],
-                "FUNCformCluster" :[ "basic":false, "extra_A":false, "extra_B":false, "new_Test":true, "day":"", wiki_link:wikiPrefix + "-" + "FUNCformCluster", wiki_file:"FUNCformClusterWiki.txt" ]
+                "FUNCformCluster" :[ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCformCluster", wiki_file:"FUNCformClusterWiki.txt" ]
         ],
         "HA":[
                 "HAsanity" :                [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Sanity", wiki_file:"HAsanityWiki.txt"  ],
@@ -23,9 +23,9 @@
                 "HAswapNodes" :             [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Swap Nodes", wiki_file:"HAswapNodesWiki.txt"  ],
                 "HAscaling" :               [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Scaling", wiki_file:"HAscalingWiki.txt"  ],
                 "HAkillNodes" :             [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Kill Nodes", wiki_file:"HAkillNodes.txt" ],
-                "HAbackupRecover" :         [ "basic":false, "extra_A":false, "extra_B":false, "new_Test":true, "day":"", wiki_link:wikiPrefix + "-" + "HA Backup Recover", wiki_file:"HAbackupRecoverWiki.txt"  ],
-                "HAupgrade" :               [ "basic":false, "extra_A":false, "extra_B":false, "new_Test":true, "day":"", wiki_link:wikiPrefix + "-" + "HA Upgrade", wiki_file:"HAupgradeWiki.txt"  ],
-                "HAupgradeRollback" :       [ "basic":false, "extra_A":false, "extra_B":false, "new_Test":true, "day":"", wiki_link:wikiPrefix + "-" + "HA Upgrade Rollback", wiki_file:"HAupgradeRollbackWiki.txt" ]
+                "HAbackupRecover" :         [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Backup Recover", wiki_file:"HAbackupRecoverWiki.txt"  ],
+                "HAupgrade" :               [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Upgrade", wiki_file:"HAupgradeWiki.txt"  ],
+                "HAupgradeRollback" :       [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Upgrade Rollback", wiki_file:"HAupgradeRollbackWiki.txt" ]
         ],
         "SCPF":[
                 "SCPFswitchLat":                           [ "basic":true, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
@@ -44,7 +44,7 @@
                 "SCPFintentInstallWithdrawLatWithFlowObj": [ "basic":false, "extra_A":false, "extra_B":true, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
                 "SCPFscaleTopo":                           [ "basic":false, "extra_A":false, "extra_B":false, "extra_C":true, "extra_D":false, "new_Test":false, day:"" ],
                 "SCPFscalingMaxIntents":                   [ "basic":false, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":true, "new_Test":false, day:"" ],
-                "SCPFmastershipFailoverLat":               [ "basic":false, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":true, day:"" ]
+                "SCPFmastershipFailoverLat":               [ "basic":false, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":true, "new_Test":false, day:"" ]
         ],
         "USECASE":[
                 "FUNCvirNetNB" :                [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCvirNetNB", wiki_file:"FUNCvirNetNBWiki.txt"  ],
diff --git a/TestON/JenkinsFile/JenkinsfileTrigger b/TestON/JenkinsFile/JenkinsfileTrigger
index 31d606a..bdfc0bc 100644
--- a/TestON/JenkinsFile/JenkinsfileTrigger
+++ b/TestON/JenkinsFile/JenkinsfileTrigger
@@ -4,8 +4,8 @@
 test_lists = evaluate readTrusted( 'TestON/JenkinsFile/JenkinsTestONTests.groovy' )
 triggerFuncs = evaluate readTrusted( 'TestON/JenkinsFile/TriggerFuncs.groovy' )
 
-previous_version = "1.12"
-before_previous_version = "1.11"
+previous_version = "master"
+before_previous_version = "1.12"
 funcs.initializeTrend( "VM" );
 triggerFuncs.init( funcs )
 wikiContents = ""
@@ -28,7 +28,7 @@
 ]
 
 manually_run = params.manual_run
-onos_b = "master"
+onos_b = "1.13"
 test_branch = ""
 onos_tag = params.ONOSTag
 isOldFlow = true
@@ -153,20 +153,17 @@
         case Calendar.SUNDAY:
             sunday( false , true )
             day = "Sunday"
-            isOldFlow = false
             break
     }
 }
 def monday( getResult ){
     addingHeader( "FUNC" )
     FUNC_choices += adder( "FUNC", "basic", true, "M", getResult )
-    FUNC_choices += adder( "FUNC", "new_Test", true, "M", getResult )
     FUNC_choices += adder( "FUNC", "extra_A", true, "M", getResult )
     closingHeader( "FUNC" )
     addingHeader( "HA" )
     HA_choices += adder( "HA", "basic", true, "M", getResult )
     HA_choices += adder( "HA", "extra_A", true, "M", getResult )
-    //HA_choices += adder( "HA", "new_Test", true, "M", getResult )
     closingHeader( "HA" )
     addingHeader( "SCPF" )
     SCPF_choices += adder( "SCPF", "basic", true, "M", getResult )
@@ -181,13 +178,11 @@
 def tuesday( getDay, getResult ){
     addingHeader( "FUNC" )
     FUNC_choices += adder( "FUNC", "basic", getDay, "T", getResult )
-    FUNC_choices += adder( "FUNC", "new_Test", getDay, "T", getResult )
     FUNC_choices += adder( "FUNC", "extra_B", getDay, "T", getResult )
     closingHeader( "FUNC" )
     addingHeader( "HA" )
     HA_choices += adder( "HA", "basic", getDay, "T", getResult )
     HA_choices += adder( "HA", "extra_B", getDay, "T", getResult )
-    HA_choices += adder( "HA", "new_Test", getDay, "T", getResult )
     closingHeader( "HA" )
     addingHeader( "SCPF" )
     SCPF_choices += adder( "SCPF", "basic", getDay, "T", getResult )
@@ -204,18 +199,15 @@
 def wednesday( getDay, getResult ){
     addingHeader( "FUNC" )
     FUNC_choices += adder( "FUNC", "basic", getDay, "W", getResult )
-    FUNC_choices += adder( "FUNC", "new_Test", getDay, "W", getResult )
     FUNC_choices += adder( "FUNC", "extra_A", getDay, "W", getResult )
     closingHeader( "FUNC" )
     addingHeader( "HA" )
     HA_choices += adder( "HA", "basic", getDay, "W", getResult )
     HA_choices += adder( "HA", "extra_A", getDay, "W", getResult )
-    //HA_choices += adder( "HA", "new_Test", getDay, "W", getResult )
     closingHeader( "HA" )
     addingHeader( "SCPF" )
     SCPF_choices += adder( "SCPF", "basic", getDay, "W", getResult )
     SCPF_choices += adder( "SCPF", "extra_A", getDay, "W", getResult )
-    SCPF_choices += adder( "SCPF", "new_Test", getDay, "W", getResult )
     closingHeader( "SCPF" )
     addingHeader( "SR" )
     SR_choices += adder( "SR", "basic", getDay, "W", false )
@@ -226,13 +218,11 @@
 def thursday( getDay, getResult ){
     addingHeader( "FUNC" )
     FUNC_choices += adder( "FUNC", "basic", getDay, "Th", getResult )
-    FUNC_choices += adder( "FUNC", "new_Test", getDay, "Th", getResult )
     FUNC_choices += adder( "FUNC", "extra_B", getDay, "Th", getResult )
     closingHeader( "FUNC" )
     addingHeader( "HA" )
     HA_choices += adder( "HA", "basic", getDay, "Th", getResult )
     HA_choices += adder( "HA", "extra_B", getDay, "Th", getResult )
-    HA_choices += adder( "HA", "new_Test", getDay, "Th", getResult )
     closingHeader( "HA" )
     addingHeader( "SCPF" )
     SCPF_choices += adder( "SCPF", "basic", getDay, "Th", getResult )
@@ -247,13 +237,11 @@
 def friday( getDay, getResult ){
     addingHeader( "FUNC" )
     FUNC_choices += adder( "FUNC", "basic", getDay, "F", getResult )
-    FUNC_choices += adder( "FUNC", "new_Test", getDay, "F", getResult )
     FUNC_choices += adder( "FUNC", "extra_A", getDay, "F", getResult )
     closingHeader( "FUNC" )
     addingHeader( "HA" )
     HA_choices += adder( "HA", "basic", getDay, "F", getResult )
     HA_choices += adder( "HA", "extra_A", getDay, "F", getResult )
-    //HA_choices += adder( "HA", "new_Test", getDay, "F", getResult )
     closingHeader( "HA" )
     addingHeader( "SCPF" )
     SCPF_choices += adder( "SCPF", "basic", getDay, "F", getResult )
@@ -272,13 +260,11 @@
     FUNC_choices += adder( "FUNC", "basic", getDay, "Sa", getResult )
     FUNC_choices += adder( "FUNC", "extra_A", getDay, "Sa", getResult )
     FUNC_choices += adder( "FUNC", "extra_B", getDay, "Sa", getResult )
-    FUNC_choices += adder( "FUNC", "new_Test", getDay, "Sa", getResult )
     closingHeader( "FUNC" )
     addingHeader( "HA" )
     HA_choices += adder( "HA", "basic", getDay, "Sa", getResult )
     HA_choices += adder( "HA", "extra_A", getDay, "Sa", getResult )
     HA_choices += adder( "HA", "extra_B", getDay, "Sa", getResult )
-    HA_choices += adder( "HA", "new_Test", getDay, "Sa", getResult )
     closingHeader( "HA" )
     addingHeader( "SCPF" )
     SCPF_choices += adder( "SCPF", "basic", getDay, "Sa", getResult )
@@ -286,7 +272,6 @@
     SCPF_choices += adder( "SCPF", "extra_B", getDay, "Sa", getResult )
     SCPF_choices += adder( "SCPF", "extra_C", getDay, "Sa", getResult )
     SCPF_choices += adder( "SCPF", "extra_D", getDay, "Sa", getResult )
-    SCPF_choices += adder( "SCPF", "new_Test", getDay, "Sa", getResult )
     closingHeader( "SCPF" )
     addingHeader( "SR" )
     SR_choices += adder( "SR", "basic", getDay, "Sa", false )
@@ -388,7 +373,7 @@
     wikiContents += '''
         </tbody>
     </table>
-    <p><strong>Everyday</strong>, all SegmentRouting tests are built and run on every branch.</p>
+    <p><strong>Everyday</strong>, all SegmentRouting tests are built and run on every supported branch.</p>
     <p>On <strong>Weekdays</strong>, all the other tests are built and run on the master branch.</p>
     <p>On <strong>Saturdays</strong>, all the other tests are built and run on the '''+ funcs.branchWithPrefix( previous_version ) +''' branch.</p>
     <p>On <strong>Sundays</strong>, all the other tests are built and run on the '''+ funcs.branchWithPrefix( before_previous_version ) +''' branch.</p>'''
diff --git a/TestON/JenkinsFile/PerformanceFuncs.groovy b/TestON/JenkinsFile/PerformanceFuncs.groovy
index 5f9097d..37a9a73 100644
--- a/TestON/JenkinsFile/PerformanceFuncs.groovy
+++ b/TestON/JenkinsFile/PerformanceFuncs.groovy
@@ -12,7 +12,7 @@
         SCPFflowTp1g:                            [ flows:true, test:'SCPFflowTp1g', table:'flow_tp_tests', results:'flow_tp_results', file:'flowTP1gDB', rFile:'SCPFflowTp1g.R n', extra:neighbors, finalResult:1, graphTitle:[ 'Flow Throughput Test - neighbors=0', 'Flow Throughput Test - neighbors=4' ], dbCols:'avg', dbWhere:[ 'AND scale=5 AND neighbors=0 ','AND scale=5 AND NOT neighbors=0' ],  y_axis:'Throughput (,000 Flows/sec)' ],
         SCPFflowTp1gWithFlowObj:                 [ flows:true, test:'SCPFflowTp1g --params TEST/flowObj=True', table:'flow_tp_fobj_tests', results:'flow_tp_fobj_results', file:'flowTP1gDBFlowObj', rFile:'SCPFflowTp1g.R y', extra:neighbors, finalResult:0 ],
         SCPFscaleTopo:                           [ flows:false, test:'SCPFscaleTopo', table:'scale_topo_latency_details', results:'scale_topo_latency_results', file:'/tmp/scaleTopoResultDb', rFile:'SCPFscaleTopo.R', extra:none, finalResult:1, graphTitle:[ 'Scale Topology Test' ], dbCols:[ 'first_connection_to_last_connection, last_connection_to_last_role_request, last_role_request_to_last_topology' ], dbWhere:'AND scale=20' , y_axis:'Latency (s)' ],
-        SCPFswitchLat:                           [ flows:false, test:'SCPFswitchLat', table:'switch_latency_details', results:'switch_latency_results', file:'/tmp/switchEventResultDb', rFile:'SCPFswitchLat.R', extra:none, finalResult:1, graphTitle:[ 'Switch Latency Test - Switch Up','Switch Latency Test - Switch Down' ], dbCols:[ 'tcp_to_feature_reply_avg,feature_reply_to_role_request_avg,role_request_to_role_reply_avg,role_reply_to_device_avg,up_device_to_graph_avg', 'fin_ack_to_ack_avg,ack_to_device_avg,down_device_to_graph_avg' ], dbWhere:'AND scale=5', y_axis:'Latency (ms)' ],
+        SCPFswitchLat:                           [ flows:false, test:'SCPFswitchLat', table:'switch_latency_details', results:'switch_latency_results', file:'/tmp/switchEventResultDb', rFile:'SCPFswitchLat.R', extra:none, finalResult:1, graphTitle:[ 'Switch Latency Test - Switch Up','Switch Latency Test - Switch Down' ], dbCols:[ 'tcp_to_feature_reply_avg,feature_reply_device_avg,up_device_to_graph_avg', 'fin_ack_to_ack_avg,ack_to_device_avg,down_device_to_graph_avg' ], dbWhere:'AND scale=5', y_axis:'Latency (ms)' ],
         SCPFbatchFlowResp:                       [ flows:true, test:'SCPFbatchFlowResp', table:'batch_flow_tests', results:'batch_flow_results', file:'SCPFbatchFlowRespData', rFile:'SCPFbatchFlowResp.R', extra:none, finalResult:1, graphTitle:[ 'Batch Flow Test - Post', 'Batch Flow Test - Del' ], dbCols:[ 'elapsepost, posttoconfrm', 'elapsedel, deltoconfrm' ], dbWhere:'', y_axis:'Latency (s)' ],
         SCPFintentEventTp:                       [ flows:true, test:'SCPFintentEventTp', table:'intent_tp_tests', results:'intent_tp_results', file:'IntentEventTPDB', rFile:'SCPFintentEventTp.R n', extra:neighbors, finalResult:1, graphTitle:[ 'Intent Throughput Test - neighbors=0','Intent Throughput Test - neighbors=4' ], dbCols:'SUM( avg ) as avg', dbWhere:[ 'AND scale=5 AND neighbors=0 GROUP BY date,build','AND scale=5 AND NOT neighbors=0 GROUP BY date,build' ], y_axis:'Throughput (Ops/sec)' ],
         SCPFintentRerouteLat:                    [ flows:true, test:'SCPFintentRerouteLat', table:'intent_reroute_latency_tests', results:'intent_reroute_latency_results', file:'IntentRerouteLatDB', rFile:'SCPFIntentInstallWithdrawRerouteLat.R n', extra:batches, finalResult:1, graphTitle:[ 'Intent Reroute Test' ], dbCols:'avg', dbWhere:'AND scale=5 AND batch_size=100', y_axis:'Latency (ms)' ],
diff --git a/TestON/JenkinsFile/SRJenkinsFile b/TestON/JenkinsFile/SRJenkinsFile
index 4869f1e..a583774 100644
--- a/TestON/JenkinsFile/SRJenkinsFile
+++ b/TestON/JenkinsFile/SRJenkinsFile
@@ -4,7 +4,7 @@
 
 funcs.initialize( "SR" );
 jobName = env.JOB_NAME
-funcs.additionalInitForSR( jobName.reverse().take(6).reverse() )
+funcs.additionalInitForSR( jobName )
 // This is a Jenkinsfile for a scripted pipeline for the SR tests
 def prop = null
 prop = funcs.getProperties()
@@ -31,4 +31,4 @@
     tests[ test ].call()
 }
 //funcs.generateOverallGraph( prop, SR, graph_saved_directory )
-funcs.sendResultToSlack( start,  prop[ "manualRun" ], prop[ "WikiPrefix" ] )
\ No newline at end of file
+funcs.sendResultToSlack( start,  prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/SRJenkinsfileTrigger b/TestON/JenkinsFile/SRJenkinsfileTrigger
index 1d78828..98d2bd6 100644
--- a/TestON/JenkinsFile/SRJenkinsfileTrigger
+++ b/TestON/JenkinsFile/SRJenkinsfileTrigger
@@ -4,7 +4,7 @@
 test_lists = evaluate readTrusted( 'TestON/JenkinsFile/JenkinsTestONTests.groovy' )
 triggerFuncs = evaluate readTrusted( 'TestON/JenkinsFile/TriggerFuncs.groovy' )
 
-current_version = "master"
+current_version = "1.13"
 previous_version = "1.12"
 before_previous_version = "1.11"
 funcs.initializeTrend( "Fabric" );
@@ -31,7 +31,7 @@
 ]
 
 manually_run = params.manual_run
-onos_b = "master"
+onos_b = current_version
 test_branch = ""
 onos_tag = params.ONOSTag
 isOldFlow = true
@@ -124,4 +124,4 @@
         }
     }
     return result
-}
\ No newline at end of file
+}
diff --git a/TestON/JenkinsFile/scripts/SCPFswitchLat.R b/TestON/JenkinsFile/scripts/SCPFswitchLat.R
index 3535a5a..86290db 100644
--- a/TestON/JenkinsFile/scripts/SCPFswitchLat.R
+++ b/TestON/JenkinsFile/scripts/SCPFswitchLat.R
@@ -132,9 +132,7 @@
 print( "Sorting data for Switch Up Averages." )
 
 requiredColumns <- c( "up_device_to_graph_avg",
-                      "role_reply_to_device_avg",
-                      "role_request_to_role_reply_avg",
-                      "feature_reply_to_role_request_avg",
+                      "feature_reply_to_device_avg",
                       "tcp_to_feature_reply_avg" )
 
 tryCatch( upAvgs <- c( fileData[ requiredColumns] ),
@@ -170,9 +168,7 @@
 upAvgsData$type <- factor( upAvgsData$type, levels=unique( upAvgsData$type ) )
 
 sumOfUpAvgs <- fileData[ 'up_device_to_graph_avg' ] +
-               fileData[ 'role_reply_to_device_avg' ] +
-               fileData[ 'role_request_to_role_reply_avg' ] +
-               fileData[ 'feature_reply_to_role_request_avg' ] +
+               fileData[ 'feature_reply_to_device_avg' ] +
                fileData[ 'tcp_to_feature_reply_avg' ]
 
 print( "Up Averages Results:" )
diff --git a/TestON/bin/cleanup.sh b/TestON/bin/cleanup.sh
index ec67ea6..3876cea 100755
--- a/TestON/bin/cleanup.sh
+++ b/TestON/bin/cleanup.sh
@@ -28,15 +28,17 @@
 sudo kill -9 `ps -ef | grep "./cli.py" | grep -v grep | awk '{print $2}'`
 sudo kill -9 `ps -ef | grep "bin/teston" | grep -v grep | awk '{print $2}'`
 sudo kill -9 `ps -ef | grep "ssh -X" | grep -v grep | awk '{print $2}'`
-sudo mn -c
-sudo pkill -f mn.pid
-sudo pkill bgpd
-sudo pkill zebra
-sudo pkill vrrpd
-sudo pkill dhclient
-sudo pkill dhcpd
-sudo kill -9 `ps -ef | grep "bird" | grep -v grep | awk '{print $2}'`
+sudo kill -9 `ps ax | grep '[p]ython -m SimpleHTTPServer 8000' | awk '{print $1}'`
 
+if [[ -z "${OCN}" ]]; then
+    echo "Mininet cleanup skipped because OCN is not defined"
+else
+    ssh $ONOS_USER@$OCN """
+    sudo killall -9 dhclient dhcpd zebra bgpd vrrpd bird
+    sudo mn -c
+    sudo pkill -f mn.pid
+    """
+fi
 
 # Restore persistent firewall rules
 if [ "$1" = "-f" ]; then
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 23d442d..ca86a89 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -1121,6 +1121,36 @@
                 main.log.exception( self.name + ": Uncaught exception!" )
                 main.cleanAndExit()
 
+    def addRoute( self, host, dstIP, interface, ipv6=False ):
+        """
+        Add a route to host
+        Ex: h1 route add -host 224.2.0.1 h1-eth0
+        """
+        if self.handle:
+            try:
+                cmd = str( host )
+                if ipv6:
+                    cmd += " route -A inet6 add "
+                else:
+                    cmd += " route add -host "
+                cmd += str( dstIP ) + " " + str( interface )
+                self.handle.sendline( cmd )
+                self.handle.expect( "mininet>" )
+                response = self.handle.before
+                main.log.debug( "response = " + response )
+                return main.TRUE
+            except pexpect.TIMEOUT:
+                main.log.error( self.name + ": TIMEOUT exception found" )
+                main.log.error( self.name + ":     " + self.handle.before )
+                main.cleanAndExit()
+            except pexpect.EOF:
+                main.log.error( self.name + ": EOF exception found" )
+                main.log.error( self.name + ":     " + self.handle.before )
+                return main.FALSE
+            except Exception:
+                main.log.exception( self.name + ": Uncaught exception!" )
+                main.cleanAndExit()
+
     def addStaticMACAddress( self, host, GW, macaddr ):
         """
            Changes the mac address of a gateway host"""
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index b7d10bd..03fb50f 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -6115,3 +6115,205 @@
         except Exception:
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
+
+    def mcastJoin( self, sIP, groupIP, sPort, dPorts ):
+        """
+        Create a multicast route by calling 'mcast-join' command
+        sIP: source IP of the multicast route
+        groupIP: group IP of the multicast route
+        sPort: source port (e.g. of:0000000000000001/3 ) of the multicast route
+        dPorts: a list of destination ports of the multicast route
+        Returns main.TRUE if mcast route is added; Otherwise main.FALSE
+        """
+        try:
+            cmdStr = "mcast-join"
+            cmdStr += " " + str( sIP )
+            cmdStr += " " + str( groupIP )
+            cmdStr += " " + str( sPort )
+            assert isinstance( dPorts, list )
+            for dPort in dPorts:
+                cmdStr += " " + str( dPort )
+            handle = self.sendline( cmdStr )
+            assert handle is not None, "Error in sendline"
+            assert "Command not found:" not in handle, handle
+            assert "Unsupported command:" not in handle, handle
+            assert "Error executing command" not in handle, handle
+            if "Added the mcast route" in handle:
+                return main.TRUE
+            else:
+                return main.FALSE
+        except AssertionError:
+            main.log.exception( "" )
+            return None
+        except TypeError:
+            main.log.exception( self.name + ": Object not as expected" )
+            return None
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            main.cleanAndExit()
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            main.cleanAndExit()
+
+    def mcastDelete( self, sIP, groupIP, dPorts ):
+        """
+        Delete a multicast route by calling 'mcast-delete' command
+        sIP: source IP of the multicast route
+        groupIP: group IP of the multicast route
+        dPorts: a list of destination ports of the multicast route
+        Returns main.TRUE if mcast route is deleted; Otherwise main.FALSE
+        """
+        try:
+            cmdStr = "mcast-delete"
+            cmdStr += " " + str( sIP )
+            cmdStr += " " + str( groupIP )
+            assert isinstance( dPorts, list )
+            for dPort in dPorts:
+                cmdStr += " " + str( dPort )
+            handle = self.sendline( cmdStr )
+            assert handle is not None, "Error in sendline"
+            assert "Command not found:" not in handle, handle
+            assert "Unsupported command:" not in handle, handle
+            assert "Error executing command" not in handle, handle
+            if "Updated the mcast route" in handle:
+                return main.TRUE
+            else:
+                return main.FALSE
+        except AssertionError:
+            main.log.exception( "" )
+            return None
+        except TypeError:
+            main.log.exception( self.name + ": Object not as expected" )
+            return None
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            main.cleanAndExit()
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            main.cleanAndExit()
+
+    def mcastHostJoin( self, sAddr, gAddr, srcs, sinks ):
+        """
+        Create a multicast route by calling 'mcast-host-join' command
+        sAddr: we can provide * for ASM or a specific address for SSM
+        gAddr: specifies multicast group address
+        srcs: a list of the source connect points e.g. ["of:0000000000000003/12"]
+        sinks: a list of HostId of the sinks e.g. ["00:AA:00:00:01:05/40"]
+        Returns main.TRUE if mcast route is added; Otherwise main.FALSE
+        """
+        try:
+            cmdStr = "mcast-host-join"
+            cmdStr += " -sAddr " + str( sAddr )
+            cmdStr += " -gAddr " + str( gAddr )
+            assert isinstance( srcs, list )
+            for src in srcs:
+                cmdStr += " -srcs " + str( src )
+            assert isinstance( sinks, list )
+            for sink in sinks:
+                cmdStr += " -sinks " + str( sink )
+            handle = self.sendline( cmdStr )
+            assert handle is not None, "Error in sendline"
+            assert "Command not found:" not in handle, handle
+            assert "Unsupported command:" not in handle, handle
+            assert "Error executing command" not in handle, handle
+            if "Added the mcast route" in handle:
+                return main.TRUE
+            else:
+                return main.FALSE
+        except AssertionError:
+            main.log.exception( "" )
+            return None
+        except TypeError:
+            main.log.exception( self.name + ": Object not as expected" )
+            return None
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            main.cleanAndExit()
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            main.cleanAndExit()
+
+    def mcastHostDelete( self, sAddr, gAddr, host=None ):
+        """
+        Delete multicast sink(s) by calling 'mcast-host-delete' command
+        sAddr: we can provide * for ASM or a specific address for SSM
+        gAddr: specifies multicast group address
+        hosts: HostId of the sink e.g. "00:AA:00:00:01:05/40",
+               will delete the route if not specified
+        Returns main.TRUE if the mcast sink is deleted; Otherwise main.FALSE
+        """
+        try:
+            cmdStr = "mcast-host-delete"
+            cmdStr += " -sAddr " + str( sAddr )
+            cmdStr += " -gAddr " + str( gAddr )
+            if host:
+                cmdStr += " -h " + str( host )
+            handle = self.sendline( cmdStr )
+            assert handle is not None, "Error in sendline"
+            assert "Command not found:" not in handle, handle
+            assert "Unsupported command:" not in handle, handle
+            assert "Error executing command" not in handle, handle
+            if "Updated the mcast route" in handle:
+                return main.TRUE
+            elif "Deleted the mcast route" in handle:
+                return main.TRUE
+            else:
+                return main.FALSE
+        except AssertionError:
+            main.log.exception( "" )
+            return None
+        except TypeError:
+            main.log.exception( self.name + ": Object not as expected" )
+            return None
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            main.cleanAndExit()
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            main.cleanAndExit()
+
+    def mcastSourceDelete( self, sAddr, gAddr, srcs=None ):
+        """
+        Delete multicast src(s) by calling 'mcast-source-delete' command
+        sAddr: we can provide * for ASM or a specific address for SSM
+        gAddr: specifies multicast group address
+        srcs: a list of connect points of the sources e.g. ["00:AA:00:00:01:05/40"],
+              will delete the route if not specified
+        Returns main.TRUE if mcast sink is deleted; Otherwise main.FALSE
+        """
+        try:
+            cmdStr = "mcast-source-delete"
+            cmdStr += " -sAddr " + str( sAddr )
+            cmdStr += " -gAddr " + str( gAddr )
+            if srcs:
+                assert isinstance( srcs, list )
+                for src in srcs:
+                    cmdStr += " -src " + str( src )
+            handle = self.sendline( cmdStr )
+            assert handle is not None, "Error in sendline"
+            assert "Command not found:" not in handle, handle
+            assert "Unsupported command:" not in handle, handle
+            assert "Error executing command" not in handle, handle
+            if "Updated the mcast route" in handle:
+                return main.TRUE
+            elif "Deleted the mcast route" in handle:
+                return main.TRUE
+            else:
+                return main.FALSE
+        except AssertionError:
+            main.log.exception( "" )
+            return None
+        except TypeError:
+            main.log.exception( self.name + ": Object not as expected" )
+            return None
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            main.cleanAndExit()
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            main.cleanAndExit()
diff --git a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.params b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.params
index e233dc5..fc3e23a 100644
--- a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.params
+++ b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.params
@@ -25,6 +25,7 @@
         <wrapper2>netconf</wrapper2>
         <wrapper3>topo</wrapper3>
         <topology></topology>
+        <iface></iface>
     </DEPENDENCY>
 
     <ENV>
diff --git a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
index 566cb2b..d374b15 100644
--- a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
+++ b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
@@ -54,6 +54,7 @@
             main.dependencyPath = main.testOnDirectory + \
                                   main.params[ 'DEPENDENCY' ][ 'path' ]
             # main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
+            main.iface = main.params[ 'DEPENDENCY' ][ 'iface' ]
             main.scale = ( main.params[ 'SCALE' ][ 'size' ] ).split( "," )
             wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
             wrapperFile2 = main.params[ 'DEPENDENCY' ][ 'wrapper2' ]
@@ -106,6 +107,12 @@
         - Connect to cli
         """
         main.testSetUp.ONOSSetUp( main.Cluster, True )
+        time.sleep( main.startUpSleep )
+        utilities.assert_equals(expect=True,
+                                actual=main.Cluster.nodesCheck(),
+                                onpass="Nodes check successful.",
+                                onfail="Nodes check failed.")
+
 
     def CASE19( self, main ):
         """
diff --git a/TestON/tests/FUNC/FUNCnetconf/dependencies/netconf.py b/TestON/tests/FUNC/FUNCnetconf/dependencies/netconf.py
index b8e7054..121eb67 100644
--- a/TestON/tests/FUNC/FUNCnetconf/dependencies/netconf.py
+++ b/TestON/tests/FUNC/FUNCnetconf/dependencies/netconf.py
@@ -48,14 +48,7 @@
     """
     startResult = main.FALSE
     try:
-        main.ONOSbench.handle.sendline( "" )
-        main.ONOSbench.handle.expect( "\$" )
-        main.ONOSbench.handle.sendline( "ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }'" )
-        main.ONOSbench.handle.expect( "\$1 }'" )
-        main.ONOSbench.handle.expect( "\$" )
-        main.configDeviceIp = main.ONOSbench.handle.before
-        main.configDeviceIp = main.configDeviceIp.split()
-        main.configDeviceIp = main.configDeviceIp[ 0 ]
+        main.configDeviceIp = main.ONOSbench.getIpAddr( iface=main.iface )
         main.log.info( "Device to be configured: " + str( main.configDeviceIp ) )
         main.ONOSbench.handle.sendline( "sudo ofc-server" )
         main.ONOSbench.handle.expect( "\$" )
@@ -76,13 +69,21 @@
     """
     createCfgResult = main.FALSE
     # TODO, add ability to set Manufacturer, Hardware and Software versions
-    main.cfgJson = '{ "devices":{ "netconf:' + main.configDeviceIp + ":" +\
-                    main.configDevicePort + '":' + '{ "basic":{ "driver":"' +\
-                    main.configDriver + '" } } }, "apps": { "' +\
-                    main.configApps + '":{ "netconf_devices":[ { "username":' +\
-                    main.configName + ', "password":' + main.configPass +\
-                    ', "ip":"' + main.configDeviceIp + '", "port":' +\
-                    main.configPort + '} ] } } }'
+    main.cfgJson = '{' \
+                        '"devices": {' \
+                            '"netconf:' + main.configDeviceIp + ':' + main.configDevicePort + '": {' \
+                                '"netconf": {' \
+                                    '"ip": "' + main.configDeviceIp + '",' \
+                                    '"port": ' + main.configPort + ',' \
+                                    '"username": ' + main.configName + ',' \
+                                    '"password": ' + main.configPass + \
+                                '},' \
+                                '"basic": {' \
+                                    '"driver": "' + main.configDriver + '"' \
+                                '}' \
+                            '}' \
+                        '}' \
+                    '}'
     try:
         file = open( os.path.dirname( main.testFile ) + "/dependencies/netconfConfig.json", 'w' )
         # These lines can cause errors during the configuration process because
diff --git a/TestON/tests/HA/HAscaling/HAscaling.params b/TestON/tests/HA/HAscaling/HAscaling.params
index 035b12b..8478214 100644
--- a/TestON/tests/HA/HAscaling/HAscaling.params
+++ b/TestON/tests/HA/HAscaling/HAscaling.params
@@ -30,7 +30,7 @@
     <scaling>1,3b,3,3b,5b,5,5b,7b,7,7b,5b,5,5b,3b,3,3b,1</scaling>
     <server>
         <port>8000</port>
-        <interface>eth0</interface>
+        <interface></interface>
     </server>
     <apps></apps>
     <ONOS_Configuration>
diff --git a/TestON/tests/HA/HAscaling/HAscaling.params.fabric b/TestON/tests/HA/HAscaling/HAscaling.params.fabric
index b3a9fcf..1566713 100644
--- a/TestON/tests/HA/HAscaling/HAscaling.params.fabric
+++ b/TestON/tests/HA/HAscaling/HAscaling.params.fabric
@@ -30,7 +30,7 @@
     <scaling>1,3b,3,3b,5b,5,5b,7b,7,7b,5b,5,5b,3b,3,3b,1</scaling>
     <server>
         <port>8000</port>
-        <interface>eth0</interface>
+        <interface></interface>
     </server>
     <apps></apps>
     <ONOS_Configuration>
diff --git a/TestON/tests/HA/HAscaling/HAscaling.params.intents b/TestON/tests/HA/HAscaling/HAscaling.params.intents
index 0ce1246..53b96b5 100644
--- a/TestON/tests/HA/HAscaling/HAscaling.params.intents
+++ b/TestON/tests/HA/HAscaling/HAscaling.params.intents
@@ -30,7 +30,7 @@
     <scaling>1,3b,3,3b,5b,5,5b,7b,7,7b,5b,5,5b,3b,3,3b,1</scaling>
     <server>
         <port>8000</port>
-        <interface>eth0</interface>
+        <interface></interface>
     </server>
     <apps></apps>
     <ONOS_Configuration>
diff --git a/TestON/tests/HA/HAscaling/dependencies/Server.py b/TestON/tests/HA/HAscaling/dependencies/Server.py
index dbb1247..0c5e743 100644
--- a/TestON/tests/HA/HAscaling/dependencies/Server.py
+++ b/TestON/tests/HA/HAscaling/dependencies/Server.py
@@ -59,7 +59,7 @@
                 handle = component.handle
                 # cd to rootDir
                 handle.sendline( "cd " + str( rootDir ) )
-                handle.expect( "\$" )
+                handle.expect( component.prompt )
                 # Start server
                 cmd = "python -m SimpleHTTPServer {}".format( port )
                 if logDir:
@@ -68,15 +68,19 @@
                     cmd += "&> {dev/null}"  # Throw away all output
                 cmd += " &"
                 handle.sendline( cmd )
-                handle.expect( "\$" )
+                handle.expect( component.prompt )
                 response = handle.before
                 # Return to home dir
                 handle.sendline( "cd " + component.home )
-                handle.expect( "\$" )
+                handle.expect( component.prompt )
                 response += handle.before
                 if "Exit" in response:
                     main.log.error( "Error starting server. Check server log for details" )
                     main.log.debug( handle.before )
+                    # Show the log
+                    handle.sendline( "cat {}".format( logDir ))
+                    handle.expect( component.prompt )
+                    main.log.debug( handle.before )
                     retValue = main.FALSE
                 # capture PID for later use
                 # EX: [ 1 ] 67987
@@ -108,7 +112,7 @@
                 handle = self.component.handle
                 cmd = "sudo kill {}".format( self.PID )
                 handle.sendline( cmd )
-                handle.expect( "\$" )
+                handle.expect( component.prompt )
                 # TODO: What is bad output? cannot sudo?
             else:
                 main.log.error( "Component handle is not set" )
@@ -147,16 +151,16 @@
                 handle = self.component.handle
                 # cd to rootDir
                 handle.sendline( "cd " + str( self.rootDir ) )
-                handle.expect( "\$" )
+                handle.expect( component.prompt )
                 cmd = "./onos-gen-partitions {} {} ".format( filename, nodes )
                 if equal:
                     cmd += "-e"
                 handle.sendline( cmd )
-                handle.expect( "\$" )
+                handle.expect( component.prompt )
                 response = handle.before
                 # Return to home dir
                 handle.sendline( "cd " + self.component.home )
-                handle.expect( "\$" )
+                handle.expect( component.prompt )
                 response += handle.before
                 if "Traceback" in response:
                     main.log.error( handle.before )
diff --git a/TestON/tests/HA/HAswapNodes/HAswapNodes.params b/TestON/tests/HA/HAswapNodes/HAswapNodes.params
index 7cac443..8ed012a 100644
--- a/TestON/tests/HA/HAswapNodes/HAswapNodes.params
+++ b/TestON/tests/HA/HAswapNodes/HAswapNodes.params
@@ -29,7 +29,7 @@
 
     <server>
         <port>8000</port>
-        <interface>eth0</interface>
+        <interface></interface>
     </server>
     <apps></apps>
     <ONOS_Configuration>
diff --git a/TestON/tests/HA/HAswapNodes/HAswapNodes.params.fabric b/TestON/tests/HA/HAswapNodes/HAswapNodes.params.fabric
index 37aca8f..7ba6fd4 100644
--- a/TestON/tests/HA/HAswapNodes/HAswapNodes.params.fabric
+++ b/TestON/tests/HA/HAswapNodes/HAswapNodes.params.fabric
@@ -29,7 +29,7 @@
 
     <server>
         <port>8000</port>
-        <interface>eth0</interface>
+        <interface></interface>
     </server>
     <apps></apps>
     <ONOS_Configuration>
diff --git a/TestON/tests/HA/HAswapNodes/HAswapNodes.params.intents b/TestON/tests/HA/HAswapNodes/HAswapNodes.params.intents
index fe7c881..ec9b84b 100644
--- a/TestON/tests/HA/HAswapNodes/HAswapNodes.params.intents
+++ b/TestON/tests/HA/HAswapNodes/HAswapNodes.params.intents
@@ -29,7 +29,7 @@
 
     <server>
         <port>8000</port>
-        <interface>eth0</interface>
+        <interface></interface>
     </server>
     <apps></apps>
     <ONOS_Configuration>
diff --git a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
index 74afcf8..8f3dcda 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
+++ b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
@@ -148,9 +148,7 @@
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'Ave' ] = {}
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'Std' ] = {}
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'T_F' ] = []  # TCP to Feature
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'F_R' ] = []  # Feature to Role
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'RQ_RR' ] = []  # role request to role reply
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'RR_D' ] = []  # role reply to Device
+            resultDict[ 'up' ][ 'node' + str( i ) ][ 'F_D' ] = []  # Feature to Device
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'D_G' ] = []  # Device to Graph
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'E_E' ] = []  # TCP to Graph
 
@@ -206,16 +204,12 @@
                 maxDict[ 'up' ][ 'max' ] = EtoEtemp
                 maxDict[ 'up' ][ 'node' ] = i
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'Ave' ][ 'T_F' ] = numpy.average( resultDict[ 'up' ][ 'node' + str( i ) ][ 'T_F' ] )
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'Ave' ][ 'F_R' ] = numpy.average( resultDict[ 'up' ][ 'node' + str( i ) ][ 'F_R' ] )
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'Ave' ][ 'RQ_RR' ] = numpy.average( resultDict[ 'up' ][ 'node' + str( i ) ][ 'RQ_RR' ] )
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'Ave' ][ 'RR_D' ] = numpy.average( resultDict[ 'up' ][ 'node' + str( i ) ][ 'RR_D' ] )
+            resultDict[ 'up' ][ 'node' + str( i ) ][ 'Ave' ][ 'F_D' ] = numpy.average( resultDict[ 'up' ][ 'node' + str( i ) ][ 'F_D' ] )
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'Ave' ][ 'D_G' ] = numpy.average( resultDict[ 'up' ][ 'node' + str( i ) ][ 'D_G' ] )
 
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'Std' ][ 'E_E' ] = numpy.std( resultDict[ 'up' ][ 'node' + str( i ) ][ 'E_E' ] )
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'Std' ][ 'T_F' ] = numpy.std( resultDict[ 'up' ][ 'node' + str( i ) ][ 'T_F' ] )
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'Std' ][ 'F_R' ] = numpy.std( resultDict[ 'up' ][ 'node' + str( i ) ][ 'F_R' ] )
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'Std' ][ 'RQ_RR' ] = numpy.std( resultDict[ 'up' ][ 'node' + str( i ) ][ 'RQ_RR' ] )
-            resultDict[ 'up' ][ 'node' + str( i ) ][ 'Std' ][ 'RR_D' ] = numpy.std( resultDict[ 'up' ][ 'node' + str( i ) ][ 'RR_D' ] )
+            resultDict[ 'up' ][ 'node' + str( i ) ][ 'Std' ][ 'F_D' ] = numpy.std( resultDict[ 'up' ][ 'node' + str( i ) ][ 'F_D' ] )
             resultDict[ 'up' ][ 'node' + str( i ) ][ 'Std' ][ 'D_G' ] = numpy.std( resultDict[ 'up' ][ 'node' + str( i ) ][ 'D_G' ] )
 
             # calculate average and std for result, and grep the max End to End data
@@ -248,19 +242,9 @@
                             "TCP to Feature Std: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Std' ][ 'T_F' ] ) ) )
 
             main.log.report(
-                            "Feature to Role average: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Ave' ][ 'F_R' ] ) ) )
+                            "Feature to Device average: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Ave' ][ 'F_D' ] ) ) )
             main.log.report(
-                            "Feature to Role Std: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Std' ][ 'F_R' ] ) ) )
-
-            main.log.report(
-                            "Role request to Role reply average: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Ave' ][ 'RQ_RR' ] ) ) )
-            main.log.report(
-                            "Role request to Role reply Std: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Std' ][ 'RQ_RR' ] ) ) )
-
-            main.log.report(
-                            "Role reply to Device average: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Ave' ][ 'RR_D' ] ) ) )
-            main.log.report(
-                            "Role reply to Device Std: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Std' ][ 'RR_D' ] ) ) )
+                            "Feature to Device Std: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Std' ][ 'F_D' ] ) ) )
 
             main.log.report(
                             "Device to Graph average: {}".format( str( resultDict[ "up" ][ 'node' + str( i ) ][ 'Ave' ][ 'D_G' ] ) ) )
@@ -297,9 +281,7 @@
             # put result
             temp += "," + str( "%.2f" % resultDict[ 'up' ][ 'node' + str( maxDict[ 'up' ][ 'node' ] ) ][ 'Ave' ][ 'E_E' ] )
             temp += "," + str( "%.2f" % resultDict[ 'up' ][ 'node' + str( maxDict[ 'up' ][ 'node' ] ) ][ 'Ave' ][ 'T_F' ] )
-            temp += "," + str( "%.2f" % resultDict[ 'up' ][ 'node' + str( maxDict[ 'up' ][ 'node' ] ) ][ 'Ave' ][ 'F_R' ] )
-            temp += "," + str( "%.2f" % resultDict[ 'up' ][ 'node' + str( maxDict[ 'up' ][ 'node' ] ) ][ 'Ave' ][ 'RQ_RR' ] )
-            temp += "," + str( "%.2f" % resultDict[ 'up' ][ 'node' + str( maxDict[ 'up' ][ 'node' ] ) ][ 'Ave' ][ 'RR_D' ] )
+            temp += "," + str( "%.2f" % resultDict[ 'up' ][ 'node' + str( maxDict[ 'up' ][ 'node' ] ) ][ 'Ave' ][ 'F_D' ] )
             temp += "," + str( "%.2f" % resultDict[ 'up' ][ 'node' + str( maxDict[ 'up' ][ 'node' ] ) ][ 'Ave' ][ 'D_G' ] )
 
             temp += "," + str( "%.2f" % resultDict[ 'down' ][ 'node' + str( maxDict[ 'down' ][ 'node' ] ) ][ 'Ave' ][ 'E_E' ] )
diff --git a/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py b/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
index a96fc20..b097166 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
+++ b/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
@@ -260,12 +260,8 @@
         # up Latency
         for d in resultDict[ switchStatus ]:
             T_Ftemp = 0
-            F_Rtemp = 0
-            RQ_RRtemp = 0
             try:
                 T_Ftemp = tempResultDict[ 'Feature' ] - tempResultDict[ 'TCP' ]
-                F_Rtemp = tempResultDict[ 'RQ' ] - tempResultDict[ 'Feature' ]
-                RQ_RRtemp = tempResultDict[ 'RR' ] - tempResultDict[ 'RQ' ]
             except KeyError:
                 main.log.warn( "Tshark Result was incorrect!" )
                 main.log.warn( tempResultDict )
@@ -275,15 +271,11 @@
                 return
             if not warmup:
                 resultDict[ switchStatus ][ d ][ 'T_F' ].append( T_Ftemp )
-                resultDict[ switchStatus ][ d ][ 'F_R' ].append( F_Rtemp )
-                resultDict[ switchStatus ][ d ][ 'RQ_RR' ].append( RQ_RRtemp )
 
             main.log.info( "{} TCP to Feature: {}".format( d, str( T_Ftemp ) ) )
-            main.log.info( "{} Feature to Role Request: {}".format( d, str( F_Rtemp ) ) )
-            main.log.info( "{} Role Request to Role Reply: {}".format( d, str( RQ_RRtemp ) ) )
 
         for i in range( 1, main.Cluster.numCtrls + 1 ):
-            RR_Dtemp = 0
+            F_Dtemp = 0
             D_Gtemp = 0
             E_Etemp = 0
             main.log.info( "================================================" )
@@ -315,12 +307,12 @@
                 break
             if DeviceTime != 0:
                 try:
-                    RR_Dtemp = DeviceTime - tempResultDict[ 'RR' ]
+                    F_Dtemp = DeviceTime - tempResultDict[ 'Feature' ]
                     D_Gtemp = GraphTime - DeviceTime
                     E_Etemp = GraphTime - tempResultDict[ 'TCP' ]
-                    check = checkResult( RR_Dtemp, D_Gtemp, E_Etemp )
+                    check = checkResult( F_Dtemp, D_Gtemp, E_Etemp )
                     if check == 1:
-                        main.log.info( "Role reply to Device:{}".format( RR_Dtemp ) )
+                        main.log.info( "Feature to Device:{}".format( F_Dtemp ) )
                         main.log.info( "Device to Graph:{}".format( D_Gtemp ) )
                         main.log.info( "End to End:{}".format( E_Etemp ) )
                         main.log.info( "================================================" )
@@ -344,7 +336,7 @@
                     checkTotalWrongNum()
                     break
                 if not warmup and check == 1:
-                    resultDict[ switchStatus ][ 'node' + str( i ) ][ 'RR_D' ].append( RR_Dtemp )
+                    resultDict[ switchStatus ][ 'node' + str( i ) ][ 'F_D' ].append( F_Dtemp )
                     resultDict[ switchStatus ][ 'node' + str( i ) ][ 'D_G' ].append( D_Gtemp )
                     resultDict[ switchStatus ][ 'node' + str( i ) ][ 'E_E' ].append( E_Etemp )
             else:
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.params b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.params
index 0189744..6af0cde 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.params
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.params
@@ -1,5 +1,5 @@
 <PARAMS>
-    <testcases>1</testcases>
+    <testcases>1,2,3,4,5,6,7,8,101,102,103,201</testcases>
 
     <GRAPH>
         <nodeCluster>Fabric</nodeCluster>
@@ -7,20 +7,21 @@
     </GRAPH>
 
     <SCALE>
-        <size>1</size>
-        <max>1</max>
+        <size>3</size>
+        <max>3</max>
     </SCALE>
 
     <DEPENDENCY>
         <useCommonConf>False</useCommonConf>
         <useCommonTopo>True</useCommonTopo>
-        <topology>trellis_fabric.py</topology>
+        <topology>hagg_fabric.py</topology>
         <lib>routinglib.py,trellislib.py</lib>
+        <conf>bgpdbgp1.conf,bgpdbgp2.conf,bgpdr1.conf,bgpdr2.conf,dhcpd6.conf,dhcpd.conf,zebradbgp1.conf,zebradbgp2.conf</conf>
     </DEPENDENCY>
 
     <ENV>
         <cellName>productionCell</cellName>
-        <cellApps>drivers,segmentrouting,openflow,fpm,netcfghostprovider</cellApps>
+        <cellApps>drivers,segmentrouting,openflow,fpm,dhcprelay,netcfghostprovider,routeradvertisement,t3,mcast</cellApps>
     </ENV>
 
     <GIT>
@@ -33,11 +34,17 @@
     </CTRL>
 
     <timers>
-        <LinkDiscovery>12</LinkDiscovery>
-        <SwitchDiscovery>12</SwitchDiscovery>
+        <LinkDiscovery>30</LinkDiscovery>
+        <SwitchDiscovery>30</SwitchDiscovery>
+        <OnosDiscovery>30</OnosDiscovery>
+        <loadNetcfgSleep>5</loadNetcfgSleep>
+        <startMininetSleep>60</startMininetSleep>
+        <balanceMasterSleep>10</balanceMasterSleep>
+        <mcastSleep>5</mcastSleep>
     </timers>
 
-    <SLEEP>
-        <startup>10</startup>
-    </SLEEP>
+    <SCAPY>
+        <HOSTNAMES>h1v4,h3v4,h4v4,h8v4,h1v6,h3v6,h4v6,h8v6</HOSTNAMES>
+    </SCAPY>
+
 </PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.py b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.py
index 616ba4c..b2a7139 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.py
@@ -4,8 +4,12 @@
 
     def CASE1( self, main ):
         """
-        Sets up 3 ONOS instances
-        Start 2x2 topology of hardware switches
+        Sets up 3 ONOS instances, start H-AGG topology
+        Create a Multicast flow between a source and sink on the same dual-tor leaf
+        Verify flows and groups
+        Verify traffic
+        Remove sink
+        Verify flows and groups
         """
         try:
             from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
@@ -18,135 +22,260 @@
             main.funcs = SRMulticastTest()
         main.funcs.runTest( main,
                             test_idx=1,
-                            topology='2x2',
-                            onosNodes=1,
-                            description="TBD" )
+                            onosNodes=3,
+                            description="Create a Multicast flow between a source and sink on the same dual-tor leaf" )
 
-    def CASE01( self, main ):
+    def CASE2( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Create a Multicast flow between a source and sink on the same dual-tor leaf
-        Verify flows and groups
-        Verify traffic
-        Remove sink
-        Verify flows and groups
-        """
-        pass
-
-    def CASE02( self, main ):
-        """
-        Sets up 3 ONOS instances, start 2x5 topology
+        Sets up 3 ONOS instances, start H-AGG topology
         Create a Multicast flow between a source and sink on different dual-tor leaves
         Verify flows and groups
         Verify traffic
         Remove sink
         Verify flows and groups
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=2,
+                            onosNodes=3,
+                            description="Create a Multicast flow between a source and sink on different dual-tor leaves" )
 
-    def CASE03( self, main ):
+    def CASE3( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
+        Sets up 3 ONOS instances, start H-AGG topology
         Create a Multicast flow between a source and sink on different leaves (sink on single-tor)
         Verify flows and groups
         Verify traffic
         Remove sink
         Verify flows and groups
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=3,
+                            onosNodes=3,
+                            description="Create a Multicast flow between a source and sink on different leaves (sink on single-tor)" )
 
-    def CASE04( self, main ):
+    def CASE4( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE01 and CASE02
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE1 and CASE2
         Verify flows and groups
         Verify traffic
         Remove sinks
         Verify flows and groups
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=4,
+                            onosNodes=3,
+                            description="Combines CASE1 and CASE2" )
 
-    def CASE05( self, main ):
+    def CASE5( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE02 and CASE03
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE2 and CASE3
         Verify flows and groups
         Verify traffic
         Remove sinks
         Verify flows and groups
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=5,
+                            onosNodes=3,
+                            description="Combines CASE2 and CASE3" )
 
-    def CASE06( self, main ):
+    def CASE6( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE01 and CASE03
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE1 and CASE3
         Verify flows and groups
         Verify traffic
         Remove sinks
         Verify flows and groups
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=5,
+                            onosNodes=3,
+                            description="Combines CASE1 and CASE3" )
 
-    def CASE07( self, main ):
+    def CASE7( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE01, CASE02 and CASE03
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE1, CASE2 and CASE3
         Verify flows and groups
         Verify traffic
         Remove sinks
         Verify flows and groups
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=7,
+                            onosNodes=3,
+                            description="Combines CASE7 with route removal" )
 
-    def CASE08( self, main ):
+    def CASE8( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with route removal
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with route removal
         Verify flows and groups
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=8,
+                            onosNodes=3,
+                            description="Combines CASE7 with route removal",
+                            removeRoute=True )
 
     def CASE101( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with a link failure (link ingress-spine)
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with a link failure (link ingress-spine)
         Verify flows and groups
         Verify traffic
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=101,
+                            onosNodes=3,
+                            description="Combines CASE7 with a link failure (link ingress-spine)",
+                            linkFailure=True )
 
     def CASE102( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with a link failure (link spine-egress-dt-leaf)
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with a link failure (link spine-egress-dt-leaf)
         Verify flows and groups
         Verify traffic
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=102,
+                            onosNodes=3,
+                            description="Combines CASE7 with a link failure (link spine-engress-dt-leaf)",
+                            linkFailure=True )
 
     def CASE103( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with a link failure (link spine-egress-st-leaf)
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with a link failure (link spine-egress-st-leaf)
         Verify flows and groups
         Verify traffic
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=103,
+                            onosNodes=3,
+                            description="Combines CASE7 with a link failure (link spine-engress-st-leaf)",
+                            linkFailure=True )
 
     def CASE201( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with spine failure
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with spine failure
         Verify flows and groups
         Verify traffic
         """
-        pass
+        try:
+            from tests.USECASE.SegmentRouting.SRMulticast.dependencies.SRMulticastTest import SRMulticastTest
+        except ImportError:
+            main.log.error( "SRMulticastTest not found. Exiting the test" )
+            main.cleanAndExit()
+        try:
+            main.funcs
+        except ( NameError, AttributeError ):
+            main.funcs = SRMulticastTest()
+        main.funcs.runTest( main,
+                            test_idx=201,
+                            onosNodes=3,
+                            description="Combines CASE7 with spine failure",
+                            switchFailure=True )
 
     def CASE202( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with ingress failure and recovery
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with ingress failure and recovery
         Verify flows and groups are removed (failure)
         Verify flows and groups (recovery)
         Verify traffic (recovery)
@@ -155,8 +284,8 @@
 
     def CASE203( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with egress-dt-leaf failure and recovery
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with egress-dt-leaf failure and recovery
         Verify flows and groups are removed for the failing sink (failure)
         Verify traffic on remaining sinks (failure)
         Verify flows and groups (recovery)
@@ -166,8 +295,8 @@
 
     def CASE204( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with egress-st-leaf failure and recovery
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with egress-st-leaf failure and recovery
         Verify flows and groups are removed for the failing sink (failure)
         Verify traffic on remaining sinks (failure)
         Verify flows and groups (recovery)
@@ -177,8 +306,8 @@
 
     def CASE205( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with egress leaves failure and recovery
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with egress leaves failure and recovery
         Verify flows and groups are removed for the failing sinks (failure)
         Verify traffic on remaining sink (failure)
         Verify flows and groups (recovery)
@@ -188,8 +317,8 @@
 
     def CASE301( self, main ):
         """
-        Sets up 3 ONOS instances, start 2x5 topology
-        Combines CASE07 with ONOS failure and recovery
+        Sets up 3 ONOS instances, start H-AGG topology
+        Combines CASE7 with ONOS failure and recovery
         Verify flows and groups (failure)
         Verify traffic (failure)
         Verify flows and groups (recovery)
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo
index 34a2013..1c3f8a6 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo
@@ -16,151 +16,32 @@
                 <rest_port></rest_port>
                 <prompt></prompt>  # TODO: we technically need a few of these, one per component
                 <onos_home></onos_home>  # defines where onos home is
-                <nodes>1</nodes>  # number of nodes in the cluster
+                <nodes>3</nodes>  # number of nodes in the cluster
             </COMPONENTS>
         </ONOScell>
 
-        <OFDPASwitchLeaf205>
-            <host>10.128.0.205</host>
-            <user>root</user>
-            <password>onl</password>
-            <type>OFDPASwitchDriver</type>
-            <connect_order>2</connect_order>
-            <COMPONENTS>
-                <shortName>leaf205</shortName>
-                <dpid>0x205</dpid>
-                <port1>49</port1>
-                <link1>OFDPASwitchSpine227</link1>
-                <port2>51</port2>
-                <link2>OFDPASwitchSpine228</link2>
-                <port3>33</port3>
-                <link3>Host1</link3>
-                <port4>44</port4>
-                <link4>Host2</link4>
-            </COMPONENTS>
-        </OFDPASwitchLeaf205>
-
-        <OFDPASwitchLeaf206>
-            <host>10.128.0.206</host>
-            <user>root</user>
-            <password>onl</password>
-            <type>OFDPASwitchDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS>
-                <shortName>leaf206</shortName>
-                <dpid>0x206</dpid>
-                <port1>49</port1>
-                <link1>OFDPASwitchSpine227</link1>
-                <port2>51</port2>
-                <link2>OFDPASwitchSpine228</link2>
-                <port3>33</port3>
-                <link3>Host3</link3>
-                <port4>44</port4>
-                <link4>Host4</link4>
-            </COMPONENTS>
-        </OFDPASwitchLeaf206>
-
-        <OFDPASwitchSpine227>
-            <host>10.128.0.227</host>
-            <user>root</user>
-            <password>onl</password>
-            <type>OFDPASwitchDriver</type>
-            <connect_order>4</connect_order>
-            <COMPONENTS>
-                <shortName>spine227</shortName>
-                <dpid>0x227</dpid>
-                <port1>25</port1>
-                <link1>OFDPASwitchLeaf205</link1>
-                <port2>27</port2>
-                <link2>OFDPASwitchLeaf206</link2>
-            </COMPONENTS>
-        </OFDPASwitchSpine227>
-
-        <OFDPASwitchSpine228>
-            <host>10.128.0.228</host>
-            <user>root</user>
-            <password>onl</password>
-            <type>OFDPASwitchDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS>
-                <shortName>spine228</shortName>
-                <dpid>0x228</dpid>
-                <port1>25</port1>
-                <link1>OFDPASwitchLeaf205</link1>
-                <port2>27</port2>
-                <link2>OFDPASwitchLeaf206</link2>
-            </COMPONENTS>
-        </OFDPASwitchSpine228>
-
-        <Host1>
-            <host>10.128.100.58</host>
-            <user>mininet</user>
-            <password>mininet</password>
-            <type>HostDriver</type>
-            <connect_order>6</connect_order>
-            <COMPONENTS>
-                <ip>10.0.10.10</ip>
-                <ip6></ip6>
-                <shortName>h1</shortName>
-                <port1>0</port1>
-                <link1>OFDPASwitchLeaf205</link1>
-            </COMPONENTS>
-        </Host1>
-
-        <Host2>
-            <host>10.128.100.59</host>
-            <user>mininet</user>
-            <password>mininet</password>
-            <type>HostDriver</type>
-            <connect_order>7</connect_order>
-            <COMPONENTS>
-                <ip>10.0.10.20</ip>
-                <ip6></ip6>
-                <shortName>h2</shortName>
-                <port1>0</port1>
-                <link1>OFDPASwitchLeaf205</link1>
-            </COMPONENTS>
-        </Host2>
-
-        <Host3>
-            <host>10.128.100.60</host>
-            <user>mininet</user>
-            <password>mininet</password>
-            <type>HostDriver</type>
-            <connect_order>8</connect_order>
-            <COMPONENTS>
-                <ip>10.0.20.10</ip>
-                <ip6></ip6>
-                <shortName>h3</shortName>
-                <port1>0</port1>
-                <link1>OFDPASwitchLeaf206</link1>
-            </COMPONENTS>
-        </Host3>
-
-        <Host4>
-            <host>10.128.100.61</host>
-            <user>mininet</user>
-            <password>mininet</password>
-            <type>HostDriver</type>
-            <connect_order>9</connect_order>
-            <COMPONENTS>
-                <ip>10.0.20.20</ip>
-                <ip6></ip6>
-                <shortName>h4</shortName>
-                <port1>0</port1>
-                <link1>OFDPASwitchLeaf206</link1>
-            </COMPONENTS>
-        </Host4>
-
-        <NetworkBench>
-            <host>localhost</host>
+        <Mininet1>
+            <host>OCN</host>
             <user>sdn</user>
             <password>rocks</password>
-            <type>NetworkDriver</type>
-            <connect_order>10</connect_order>
+            <type>MininetCliDriver</type>
+            <connect_order>2</connect_order>
             <COMPONENTS>
+                <home>~/mininet/custom/</home>
+                <prompt></prompt>
             </COMPONENTS>
-        </NetworkBench>
+        </Mininet1>
+
+        <Scapy>
+            <host>OCN</host>
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>MininetScapyCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+                <prompt></prompt>
+            </COMPONENTS>
+        </Scapy>
 
     </COMPONENT>
 </TOPOLOGY>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.physical b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.physical
new file mode 100644
index 0000000..34a2013
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.physical
@@ -0,0 +1,166 @@
+<TOPOLOGY>
+    <COMPONENT>
+        <ONOScell>
+            <host>localhost</host>  # ONOS "bench" machine
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>OnosClusterDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+                <cluster_name></cluster_name>  # Used as a prefix for cluster components. Defaults to 'ONOS'
+                <diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
+                <karaf_username></karaf_username>
+                <karaf_password></karaf_password>
+                <web_user></web_user>
+                <web_pass></web_pass>
+                <rest_port></rest_port>
+                <prompt></prompt>  # TODO: we technically need a few of these, one per component
+                <onos_home></onos_home>  # defines where onos home is
+                <nodes>1</nodes>  # number of nodes in the cluster
+            </COMPONENTS>
+        </ONOScell>
+
+        <OFDPASwitchLeaf205>
+            <host>10.128.0.205</host>
+            <user>root</user>
+            <password>onl</password>
+            <type>OFDPASwitchDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+                <shortName>leaf205</shortName>
+                <dpid>0x205</dpid>
+                <port1>49</port1>
+                <link1>OFDPASwitchSpine227</link1>
+                <port2>51</port2>
+                <link2>OFDPASwitchSpine228</link2>
+                <port3>33</port3>
+                <link3>Host1</link3>
+                <port4>44</port4>
+                <link4>Host2</link4>
+            </COMPONENTS>
+        </OFDPASwitchLeaf205>
+
+        <OFDPASwitchLeaf206>
+            <host>10.128.0.206</host>
+            <user>root</user>
+            <password>onl</password>
+            <type>OFDPASwitchDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+                <shortName>leaf206</shortName>
+                <dpid>0x206</dpid>
+                <port1>49</port1>
+                <link1>OFDPASwitchSpine227</link1>
+                <port2>51</port2>
+                <link2>OFDPASwitchSpine228</link2>
+                <port3>33</port3>
+                <link3>Host3</link3>
+                <port4>44</port4>
+                <link4>Host4</link4>
+            </COMPONENTS>
+        </OFDPASwitchLeaf206>
+
+        <OFDPASwitchSpine227>
+            <host>10.128.0.227</host>
+            <user>root</user>
+            <password>onl</password>
+            <type>OFDPASwitchDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS>
+                <shortName>spine227</shortName>
+                <dpid>0x227</dpid>
+                <port1>25</port1>
+                <link1>OFDPASwitchLeaf205</link1>
+                <port2>27</port2>
+                <link2>OFDPASwitchLeaf206</link2>
+            </COMPONENTS>
+        </OFDPASwitchSpine227>
+
+        <OFDPASwitchSpine228>
+            <host>10.128.0.228</host>
+            <user>root</user>
+            <password>onl</password>
+            <type>OFDPASwitchDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS>
+                <shortName>spine228</shortName>
+                <dpid>0x228</dpid>
+                <port1>25</port1>
+                <link1>OFDPASwitchLeaf205</link1>
+                <port2>27</port2>
+                <link2>OFDPASwitchLeaf206</link2>
+            </COMPONENTS>
+        </OFDPASwitchSpine228>
+
+        <Host1>
+            <host>10.128.100.58</host>
+            <user>mininet</user>
+            <password>mininet</password>
+            <type>HostDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS>
+                <ip>10.0.10.10</ip>
+                <ip6></ip6>
+                <shortName>h1</shortName>
+                <port1>0</port1>
+                <link1>OFDPASwitchLeaf205</link1>
+            </COMPONENTS>
+        </Host1>
+
+        <Host2>
+            <host>10.128.100.59</host>
+            <user>mininet</user>
+            <password>mininet</password>
+            <type>HostDriver</type>
+            <connect_order>7</connect_order>
+            <COMPONENTS>
+                <ip>10.0.10.20</ip>
+                <ip6></ip6>
+                <shortName>h2</shortName>
+                <port1>0</port1>
+                <link1>OFDPASwitchLeaf205</link1>
+            </COMPONENTS>
+        </Host2>
+
+        <Host3>
+            <host>10.128.100.60</host>
+            <user>mininet</user>
+            <password>mininet</password>
+            <type>HostDriver</type>
+            <connect_order>8</connect_order>
+            <COMPONENTS>
+                <ip>10.0.20.10</ip>
+                <ip6></ip6>
+                <shortName>h3</shortName>
+                <port1>0</port1>
+                <link1>OFDPASwitchLeaf206</link1>
+            </COMPONENTS>
+        </Host3>
+
+        <Host4>
+            <host>10.128.100.61</host>
+            <user>mininet</user>
+            <password>mininet</password>
+            <type>HostDriver</type>
+            <connect_order>9</connect_order>
+            <COMPONENTS>
+                <ip>10.0.20.20</ip>
+                <ip6></ip6>
+                <shortName>h4</shortName>
+                <port1>0</port1>
+                <link1>OFDPASwitchLeaf206</link1>
+            </COMPONENTS>
+        </Host4>
+
+        <NetworkBench>
+            <host>localhost</host>
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>NetworkDriver</type>
+            <connect_order>10</connect_order>
+            <COMPONENTS>
+            </COMPONENTS>
+        </NetworkBench>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/SRMulticastTest.py b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/SRMulticastTest.py
index e822c29..42e646a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/SRMulticastTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/SRMulticastTest.py
@@ -19,19 +19,16 @@
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
 
+import time
 from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
 
 class SRMulticastTest ():
 
     def __init__( self ):
         self.default = ''
-        self.topo = dict()
-        # (number of spine switch, number of leaf switch, dual-homed, description, minFlowCount - leaf)
-        self.topo[ '2x2' ] = ( 2, 2, False, '2x2 leaf-spine topology', 1 )
-        self.switchNames = {}
-        self.switchNames[ '2x2' ] = [ "leaf205", "leaf206", "spine227", "spine228" ]
+        self.switchNames = [ "leaf205", "leaf206", "spine227", "spine228" ]
 
-    def runTest( self, main, test_idx, topology, onosNodes, description, vlan = [] ):
+    def runTest( self, main, test_idx, onosNodes, description, removeRoute=False, linkFailure=False, switchFailure=False ):
         skipPackage = False
         init = False
         if not hasattr( main, 'apps' ):
@@ -41,21 +38,78 @@
         if not init and onosNodes == main.Cluster.numCtrls:
             skipPackage = True
 
-        main.case( '%s, with %s and %d ONOS instance%s' %
-                   ( description, self.topo[ topology ][ 3 ], onosNodes, 's' if onosNodes > 1 else '' ) )
+        main.case( '%s, ONOS cluster size: %s' % ( description, onosNodes ) )
 
-        main.cfgName = 'CASE%01d%01d' % ( test_idx / 10, ( ( test_idx - 1 ) % 10 ) % 4 + 1 )
+        main.resultFileName = 'CASE%03d' % test_idx
         main.Cluster.setRunningNode( onosNodes )
         run.installOnos( main, skipPackage=skipPackage, cliSleep=5 )
+        # Load configuration files
+        main.step("Load configurations")
+        main.cfgName = 'TEST_CONFIG_ipv4=1_ipv6=1_dhcp=1_routers=1'
+        run.loadJson( main )
+        main.cfgName = 'CASE%03d' % test_idx
+        run.loadMulticastConfig( main )
+        if linkFailure:
+            run.loadLinkFailureChart( main )
+        if switchFailure:
+            run.loadSwitchFailureChart( main )
+        time.sleep( float( main.params[ 'timers' ][ 'loadNetcfgSleep' ] ) )
+
         if hasattr( main, 'Mininet1' ):
-            # TODO Mininet implementation
-            pass
+            # Run the test with Mininet
+            mininet_args = ' --dhcp=1 --routers=1 --ipv6=1 --ipv4=1'
+            run.startMininet( main, main.params['DEPENDENCY']['topology'], args=mininet_args )
+            time.sleep( float( main.params[ 'timers' ][ 'startMininetSleep' ] ) )
         else:
             # Run the test with physical devices
-            run.connectToPhysicalNetwork( main, self.switchNames[ topology ] )
-        # Check if the devices are up
-        run.checkDevices( main, switches=len(self.switchNames[ topology ]))
-        # Check the flows against the devices
-        run.checkFlows( main, minFlowCount=self.topo[ topology ][ 4 ] * self.topo[ topology ][ 1 ], sleep=5 )
+            run.connectToPhysicalNetwork( main, self.switchNames )
+            # Check if the devices are up
+            run.checkDevices( main, switches=len( self.switchNames ) )
+
+        # Create scapy components
+        run.startScapyHosts( main )
+
+        for entry in main.multicastConfig:
+            main.step("Verify adding multicast route with group IP {}".format(entry["group"]))
+            # Create a multicast route
+            main.Cluster.active( 0 ).CLI.mcastHostJoin( entry["sIP"], entry["group"], entry["sPorts"], entry["dHosts"] )
+            time.sleep( float( main.params[ 'timers' ][ 'mcastSleep' ] ) )
+            # Check the flows against the devices
+            # run.checkFlows( main, minFlowCount=2, sleep=5 )
+            # Verify multicast traffic
+            run.verifyMulticastTraffic( main, entry, True, skipOnFail=True )
+
+            # Test switch failures
+            if switchFailure:
+                for switch, expected in main.switchFailureChart.items():
+                    run.killSwitch( main, switch, expected['switches_after_failure'], expected['links_after_failure'] )
+                    run.verifyMulticastTraffic( main, entry, True, skipOnFail=True )
+
+                    run.recoverSwitch( main, switch, expected['switches_before_failure'], expected['links_before_failure'] )
+                    run.verifyMulticastTraffic( main, entry, True, skipOnFail=True )
+
+            # Test link failures
+            if linkFailure:
+                for link_batch_name, info in main.linkFailureChart.items():
+                    linksToRemove = info['links'].values()
+                    linksBefore = info['links_before']
+                    linksAfter = info['links_after']
+
+                    run.killLinkBatch( main, linksToRemove, linksAfter, switches=10 )
+                    run.verifyMulticastTraffic( main, entry, True, skipOnFail=True )
+
+                    run.restoreLinkBatch( main, linksToRemove, linksBefore, switches=10 )
+                    run.verifyMulticastTraffic( main, entry, True, skipOnFail=True )
+
+            if removeRoute:
+                main.step("Verify deleting multicast route with group IP {}".format(entry["group"]))
+                # delete a multicast route
+                main.Cluster.active( 0 ).CLI.mcastHostDelete( entry["sIP"], entry["group"] )
+                time.sleep( float( main.params[ 'timers' ][ 'mcastSleep' ] ) )
+                # Check the flows against the devices
+                # run.checkFlows( main, minFlowCount=2, sleep=5 )
+                # Verify multicast traffic (traffic check is expected to fail)
+                run.verifyMulticastTraffic( main, entry, False, skipOnFail=True )
+
         # Clean up the environment
-        run.cleanup( main, physical=(not hasattr( main, 'Mininet1' )))
+        run.cleanup( main, copyKarafLog=False )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/bgpdbgp1.conf b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/bgpdbgp1.conf
index 8870fb4..474bf02 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/bgpdbgp1.conf
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/bgpdbgp1.conf
@@ -8,6 +8,21 @@
 ip prefix-list 1 seq 20 permit 10.1.2.0/24
 ip prefix-list 1 seq 30 permit 10.0.3.0/24
 ip prefix-list 1 seq 40 permit 10.0.4.0/24
+
+ip prefix-list 1 seq 50 permit 10.1.0.0/24
+ip prefix-list 1 seq 70 permit 10.1.10.0/24
+ip prefix-list 1 seq 80 permit 10.2.0.0/24
+ip prefix-list 1 seq 90 permit 10.2.30.0/24
+ip prefix-list 1 seq 100 permit 10.2.20.0/24
+ip prefix-list 1 seq 110 permit 10.2.10.0/24
+ip prefix-list 1 seq 120 permit 10.2.40.0/24
+ip prefix-list 1 seq 130 permit 10.3.0.0/24
+ip prefix-list 1 seq 140 permit 10.3.30.0/24
+ip prefix-list 1 seq 150 permit 10.3.10.0/24
+ip prefix-list 1 seq 160 permit 10.3.20.0/24
+ip prefix-list 1 seq 170 permit 10.5.10.0/24
+ip prefix-list 1 seq 180 permit 10.5.20.0/24
+
 !
 route-map NEXTHOP41 permit 10
 match ip address prefix-list 1
@@ -22,6 +37,20 @@
 !
 ipv6 prefix-list 2 seq 10 permit 2000::200/120
 ipv6 prefix-list 2 seq 20 permit 2000::300/120
+
+ipv6 prefix-list 2 seq 30 permit 1000::300/120
+ipv6 prefix-list 2 seq 40 permit 1001::300/120
+ipv6 prefix-list 2 seq 50 permit 1002::300/120
+ipv6 prefix-list 2 seq 60 permit 1003::300/120
+ipv6 prefix-list 2 seq 70 permit 1004::300/120
+ipv6 prefix-list 2 seq 80 permit 1005::300/120
+ipv6 prefix-list 2 seq 90 permit 1006::300/120
+ipv6 prefix-list 2 seq 100 permit 1007::300/120
+ipv6 prefix-list 2 seq 110 permit 1008::300/120
+ipv6 prefix-list 2 seq 120 permit 1009::300/120
+ipv6 prefix-list 2 seq 130 permit 1010::300/120
+ipv6 prefix-list 2 seq 140 permit 1011::300/120
+ipv6 prefix-list 2 seq 150 permit 1012::300/120
 !
 route-map NEXTHOP61 permit 10
 match ipv6 address prefix-list 2
@@ -64,6 +93,21 @@
 neighbor 2000::701 advertisement-interval 1
 no neighbor 2000::701 activate
 !
+
+network 10.1.0.0/24
+network 10.1.10.0/24
+network 10.2.0.0/24
+network 10.2.30.0/24
+network 10.2.20.0/24
+network 10.2.10.0/24
+network 10.2.40.0/24
+network 10.3.0.0/24
+network 10.3.30.0/24
+network 10.3.10.0/24
+network 10.3.20.0/24
+network 10.5.10.0/24
+network 10.5.20.0/24
+
 network 10.0.2.0/24
 network 10.1.2.0/24
 network 10.0.3.0/24
@@ -72,8 +116,24 @@
 ! IPv6
 !
 address-family ipv6
+
+network 1000::300/120
+network 1001::300/120
+network 1002::300/120
+network 1003::300/120
+network 1004::300/120
+network 1005::300/120
+network 1006::300/120
+network 1007::300/120
+network 1008::300/120
+network 1009::300/120
+network 1010::300/120
+network 1011::300/120
+network 1012::300/120
+
 network 2000::200/120
 network 2000::300/120
+
 neighbor 2000::101 activate
 neighbor 2000::101 route-map NEXTHOP61 out
 neighbor 2000::701 activate
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/bgpdbgp2.conf b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/bgpdbgp2.conf
index e554de4..421d5c2 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/bgpdbgp2.conf
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/bgpdbgp2.conf
@@ -8,6 +8,21 @@
 ip prefix-list 1 seq 20 permit 10.1.2.0/24
 ip prefix-list 1 seq 30 permit 10.0.3.0/24
 ip prefix-list 1 seq 40 permit 10.0.4.0/24
+
+ip prefix-list 1 seq 50 permit 10.1.0.0/24
+ip prefix-list 1 seq 60 permit 10.1.10.0/24
+ip prefix-list 1 seq 70 permit 10.2.0.0/24
+ip prefix-list 1 seq 80 permit 10.2.30.0/24
+ip prefix-list 1 seq 90 permit 10.2.20.0/24
+ip prefix-list 1 seq 100 permit 10.2.10.0/24
+ip prefix-list 1 seq 110 permit 10.2.40.0/24
+ip prefix-list 1 seq 120 permit 10.3.0.0/24
+ip prefix-list 1 seq 130 permit 10.3.30.0/24
+ip prefix-list 1 seq 140 permit 10.3.10.0/24
+ip prefix-list 1 seq 150 permit 10.3.20.0/24
+ip prefix-list 1 seq 160 permit 10.5.10.0/24
+ip prefix-list 1 seq 170 permit 10.5.20.0/24
+
 !
 route-map NEXTHOP45 permit 10
 match ip address prefix-list 1
@@ -22,6 +37,22 @@
 !
 ipv6 prefix-list 2 seq 10 permit 2000::200/120
 ipv6 prefix-list 2 seq 20 permit 2000::300/120
+
+ipv6 prefix-list 2 seq 30 permit 1000::300/120
+ipv6 prefix-list 2 seq 40 permit 1001::300/120
+ipv6 prefix-list 2 seq 50 permit 1002::300/120
+ipv6 prefix-list 2 seq 60 permit 1003::300/120
+ipv6 prefix-list 2 seq 70 permit 1004::300/120
+ipv6 prefix-list 2 seq 80 permit 1005::300/120
+ipv6 prefix-list 2 seq 90 permit 1006::300/120
+ipv6 prefix-list 2 seq 100 permit 1007::300/120
+ipv6 prefix-list 2 seq 110 permit 1008::300/120
+ipv6 prefix-list 2 seq 120 permit 1009::300/120
+ipv6 prefix-list 2 seq 130 permit 1010::300/120
+ipv6 prefix-list 2 seq 140 permit 1011::300/120
+ipv6 prefix-list 2 seq 150 permit 1012::300/120
+!
+
 !
 route-map NEXTHOP65 permit 10
 match ipv6 address prefix-list 2
@@ -64,6 +95,22 @@
 neighbor 2000::601 advertisement-interval 1
 no neighbor 2000::601 activate
 !
+
+network 10.1.0.0/24
+network 10.1.10.0/24
+network 10.2.0.0/24
+network 10.2.30.0/24
+network 10.2.20.0/24
+network 10.2.10.0/24
+network 10.2.40.0/24
+network 10.3.0.0/24
+network 10.3.30.0/24
+network 10.3.10.0/24
+network 10.3.20.0/24
+network 10.5.10.0/24
+network 10.5.20.0/24
+
+network 10.1.0.0/24
 network 10.0.2.0/24
 network 10.1.2.0/24
 network 10.0.3.0/24
@@ -72,6 +119,21 @@
 ! IPv6
 !
 address-family ipv6
+
+network 1000::300/120
+network 1001::300/120
+network 1002::300/120
+network 1003::300/120
+network 1004::300/120
+network 1005::300/120
+network 1006::300/120
+network 1007::300/120
+network 1008::300/120
+network 1009::300/120
+network 1010::300/120
+network 1011::300/120
+network 1012::300/120
+
 network 2000::200/120
 network 2000::300/120
 neighbor 2000::501 activate
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/dhcpd.conf b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/dhcpd.conf
index aa559d2..2676b07 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/dhcpd.conf
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/dhcpd.conf
@@ -6,50 +6,138 @@
 option domain-name-servers 8.8.8.8, 8.8.4.4;
 option domain-name "trellis.local";
 
-subnet 10.0.2.0 netmask 255.255.255.0 {
-  range 10.0.2.100 10.0.2.240;
-  option routers 10.0.2.254;
-}
-
-subnet 10.1.2.0 netmask 255.255.255.0 {
-  range 10.1.2.100 10.1.2.240;
-  option routers 10.1.2.254;
-}
-
 subnet 10.0.3.0 netmask 255.255.255.0 {
   range 10.0.3.100 10.0.3.240;
   option routers 10.0.3.254;
 }
 
-subnet 10.0.4.0 netmask 255.255.255.0 {
-  range 10.0.4.100 10.0.4.240;
-  option routers 10.0.4.254;
+subnet 10.1.0.0 netmask 255.255.255.0 {
+  range 10.1.0.1 10.1.0.100;
+  option routers 10.1.0.254;
 }
 
-subnet 10.0.99.3 netmask 255.255.255.255 {
+subnet 10.1.10.0 netmask 255.255.255.0 {
+  range 10.1.10.1 10.1.10.100;
+  option routers 10.1.10.254;
 }
 
-host h1 {
+subnet 10.2.0.0 netmask 255.255.255.0 {
+  range 10.2.0.1 10.2.0.100;
+  option routers 10.2.0.254;
+}
+
+subnet 10.2.30.0 netmask 255.255.255.0 {
+  range 10.2.30.1 10.2.30.100;
+  option routers 10.2.30.254;
+}
+
+subnet 10.2.20.0 netmask 255.255.255.0 {
+  range 10.2.20.1 10.2.20.100;
+  option routers 10.2.20.254;
+}
+
+subnet 10.2.10.0 netmask 255.255.255.0 {
+  range 10.2.10.1 10.2.10.100;
+  option routers 10.2.10.254;
+}
+
+subnet 10.2.40.0 netmask 255.255.255.0 {
+  range 10.2.40.1 10.2.40.100;
+  option routers 10.2.40.254;
+}
+
+subnet 10.3.0.0 netmask 255.255.255.0 {
+  range 10.3.0.1 10.3.0.100;
+  option routers 10.3.0.254;
+}
+
+subnet 10.3.10.0 netmask 255.255.255.0 {
+  range 10.3.10.1 10.3.10.100;
+  option routers 10.3.10.254;
+}
+
+subnet 10.3.30.0 netmask 255.255.255.0 {
+  range 10.3.30.1 10.3.30.100;
+  option routers 10.3.30.254;
+}
+
+subnet 10.3.20.0 netmask 255.255.255.0 {
+  range 10.3.20.1 10.3.20.100;
+  option routers 10.3.20.254;
+}
+
+subnet 10.5.10.0 netmask 255.255.255.0 {
+  range 10.5.10.1 10.5.10.100;
+  option routers 10.5.10.254;
+}
+
+subnet 10.5.20.0 netmask 255.255.255.0 {
+  range 10.5.20.1 10.5.20.100;
+  option routers 10.5.20.254;
+}
+
+host h1v4 {
   hardware ethernet 00:aa:00:00:00:01;
-  fixed-address 10.0.2.1;
+  fixed-address 10.1.0.1;
 }
 
-host h2 {
+host h2v4 {
+  hardware ethernet 00:aa:00:00:01:01;
+  fixed-address 10.1.10.1;
+}
+
+host h3v4 {
   hardware ethernet 00:aa:00:00:00:02;
-  fixed-address 10.0.2.2;
+  fixed-address 10.2.0.1;
 }
 
-host h3 {
+host h4v4 {
   hardware ethernet 00:aa:00:00:00:03;
-  fixed-address 10.0.3.1;
+  fixed-address 10.2.30.1;
 }
 
-host h4 {
+host h5v4 {
   hardware ethernet 00:aa:00:00:00:04;
-  fixed-address 10.0.3.2;
+  fixed-address 10.2.20.1;
 }
 
-host dh1 {
-  hardware ethernet 00:cc:00:00:00:01;
-  fixed-address 10.1.2.1;
+host h6v4 {
+  hardware ethernet 00:aa:00:00:00:05;
+  fixed-address 10.2.10.1;
 }
+
+host h7v4 {
+  hardware ethernet 00:aa:00:00:01:05;
+  fixed-address 10.2.40.1;
+}
+
+host h8v4 {
+  hardware ethernet 00:aa:00:00:00:06;
+  fixed-address 10.3.0.1;
+}
+
+host h9v4 {
+  hardware ethernet 00:aa:00:00:00:07;
+  fixed-address 10.3.10.1;
+}
+
+host h10v4 {
+  hardware ethernet 00:aa:00:00:00:08;
+  fixed-address 10.3.30.1;
+}
+
+host h11v4 {
+  hardware ethernet 00:aa:00:00:00:0a;
+  fixed-address 10.3.20.1;
+}
+
+host h12v4 {
+  hardware ethernet 00:aa:00:00:02:01;
+  fixed-address 10.5.10.1;
+}
+
+host h13v4 {
+  hardware ethernet 00:aa:00:00:02:02;
+  fixed-address 10.5.20.1;
+}
+
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/dhcpd6.conf b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/dhcpd6.conf
index 526de85..3afa617 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/dhcpd6.conf
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/dhcpd6.conf
@@ -3,35 +3,143 @@
 
 option dhcp6.next-hop code 242 = ip6-address;
 
-subnet6 2000::200/120 {
-  range6 2000::260 2000::2fe;
-  option dhcp6.next-hop 2000::02ff;
-}
-
 subnet6 2000::300/120 {
   range6 2000::360 2000::3fe;
   option dhcp6.next-hop 2000::03ff;
 }
 
-subnet6 2000::9903/128 {
+subnet6 1000::300/120 {
+  range6 1000::360 1000::3fe;
+  option dhcp6.next-hop 1000::03ff;
+}
+
+subnet6 1001::300/120 {
+  range6 1001::360 1001::3fe;
+  option dhcp6.next-hop 1001::03ff;
+}
+
+subnet6 1002::300/120 {
+  range6 1002::360 1002::3fe;
+  option dhcp6.next-hop 1002::03ff;
+}
+
+subnet6 1003::300/120 {
+  range6 1003::360 1003::3fe;
+  option dhcp6.next-hop 1003::03ff;
+}
+
+subnet6 1004::300/120 {
+  range6 1004::360 1004::3fe;
+  option dhcp6.next-hop 1004::03ff;
+}
+
+subnet6 1005::300/120 {
+  range6 1005::360 1005::3fe;
+  option dhcp6.next-hop 1005::03ff;
+}
+
+subnet6 1006::300/120 {
+  range6 1006::360 1006::3fe;
+  option dhcp6.next-hop 1006::03ff;
+}
+
+subnet6 1007::300/120 {
+  range6 1007::360 1007::3fe;
+  option dhcp6.next-hop 1007::03ff;
+}
+
+subnet6 1008::300/120 {
+  range6 1008::360 1008::3fe;
+  option dhcp6.next-hop 1008::03ff;
+}
+
+subnet6 1009::300/120 {
+  range6 1009::360 1009::3fe;
+  option dhcp6.next-hop 1009::03ff;
+}
+
+subnet6 1010::300/120 {
+  range6 1010::360 1010::3fe;
+  option dhcp6.next-hop 1010::03ff;
+}
+
+subnet6 1011::300/120 {
+  range6 1011::360 1011::3fe;
+  option dhcp6.next-hop 1011::03ff;
+}
+
+subnet6 1012::300/120 {
+  range6 1012::360 1012::3fe;
+  option dhcp6.next-hop 1012::03ff;
 }
 
 host h1v6 {
   hardware ethernet 00:bb:00:00:00:01;
-  fixed-address6 2000::201;
+  fixed-address6 1000::3fe;
 }
 
 host h2v6 {
-  hardware ethernet 00:bb:00:00:00:02;
-  fixed-address6 2000::202;
+  hardware ethernet 00:bb:00:00:01:01;
+  fixed-address6 1001::3fe;
 }
 
 host h3v6 {
-  hardware ethernet 00:bb:00:00:00:03;
-  fixed-address6 2000::301;
+  hardware ethernet 00:bb:00:00:00:02;
+  fixed-address6 1002::3fe;
 }
 
 host h4v6 {
-  hardware ethernet 00:bb:00:00:00:04;
-  fixed-address6 2000::302;
+  hardware ethernet 00:bb:00:00:00:03;
+  fixed-address6 1003::3fe;
 }
+
+host h5v6 {
+  hardware ethernet 00:bb:00:00:00:04;
+  fixed-address6 1004::3fe;
+}
+
+host h6v6 {
+  hardware ethernet 00:bb:00:00:00:05;
+  fixed-address6 1005::3fe;
+}
+
+host h7v6 {
+  hardware ethernet 00:bb:00:00:01:05;
+  fixed-address6 1006::3fe;
+}
+
+host h8v6 {
+  hardware ethernet 00:bb:00:00:00:06;
+  fixed-address6 1007::3fe;
+}
+
+host h9v6 {
+  hardware ethernet 00:bb:00:00:00:07;
+  fixed-address6 1008::3fe;
+}
+
+host h10v6 {
+  hardware ethernet 00:bb:00:00:00:08;
+  fixed-address6 1009::3fe;
+}
+
+host h11v6 {
+  hardware ethernet 00:bb:00:00:00:0a;
+  fixed-address6 1010::3fe;
+}
+
+host h12v6 {
+  hardware ethernet 00:bb:00:00:01:0a;
+  fixed-address6 1011::3fe;
+}
+
+host h13v6 {
+  hardware ethernet 00:bb:00:00:02:0a;
+  fixed-address6 1012::3fe;
+}
+
+
+
+
+
+
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/zebradbgp1.conf b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/zebradbgp1.conf
index 51991a4..34472bb 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/zebradbgp1.conf
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/zebradbgp1.conf
@@ -6,4 +6,4 @@
 !
 ip route 0.0.0.0/0 172.16.0.1
 !
-fpm connection ip 192.168.56.11 port 2620
+fpm connection ip 10.192.19.121 port 2620
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/zebradbgp2.conf b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/zebradbgp2.conf
index dce218d..9c6e3f4 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/zebradbgp2.conf
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/conf/zebradbgp2.conf
@@ -6,4 +6,4 @@
 !
 ip route 0.0.0.0/0 172.16.0.1
 !
-fpm connection ip 192.168.56.11 port 2620
+fpm connection ip 10.192.19.122 port 2620
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/json/TEST_CONFIG_ipv4=1_ipv6=1_dhcp=1_routers=1.json b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/json/TEST_CONFIG_ipv4=1_ipv6=1_dhcp=1_routers=1.json
new file mode 100644
index 0000000..7c6b51e
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/json/TEST_CONFIG_ipv4=1_ipv6=1_dhcp=1_routers=1.json
@@ -0,0 +1,580 @@
+{
+    "ports" : {
+         "of:0000000000000006/3" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1011::3ff/120" ],
+                    "vlan-tagged": [10]
+                }
+            ]
+        },
+        "of:0000000000000006/4" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1012::3ff/120" ],
+                    "vlan-untagged": 20
+                }
+            ]
+        },
+	"of:0000000000000006/5" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.5.10.254/24" ],
+                    "vlan-tagged": [10]
+                }
+            ]
+        },
+        "of:0000000000000006/6" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.5.20.254/24" ],
+                    "vlan-untagged": 20
+                }
+            ]
+        },
+
+        "of:0000000000000001/3" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1000::3ff/120" ],
+                    "vlan-untagged": 10
+                }
+            ]
+        },
+        "of:0000000000000001/4" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1001::3ff/120" ],
+                    "vlan-untagged": 10
+                }
+            ]
+        },
+        "of:0000000000000001/5" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.1.0.254/24" ],
+                    "vlan-untagged": 10
+                }
+            ]
+        },
+        "of:0000000000000001/6" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.1.10.254/24" ],
+                    "vlan-untagged": 10
+                }
+            ]
+        },
+        "of:0000000000000002/6" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1002::3ff/120" ],
+                    "vlan-untagged": 10
+                }
+            ]
+        },
+        "of:0000000000000002/7" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1003::3ff/120" ],
+                    "vlan-untagged": 15
+                }
+            ]
+        },
+        "of:0000000000000002/8" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1004::3ff/120" ],
+                    "vlan-tagged": [30]
+                }
+            ]
+        },
+        "of:0000000000000002/9" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.2.0.254/24" ],
+                    "vlan-untagged": 10
+                }
+            ]
+        },
+        "of:0000000000000002/10" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.2.30.254/24" ],
+                    "vlan-untagged": 16
+                }
+            ]
+        },
+        "of:0000000000000002/11" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.2.20.254/24" ],
+                    "vlan-tagged": [30]
+                }
+            ]
+        },
+        "of:0000000000000003/6" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1003::3ff/120" ],
+                    "vlan-untagged": 15
+                }
+            ]
+        },
+        "of:0000000000000003/7" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1004::3ff/120" ],
+                    "vlan-tagged": [30]
+                }
+            ]
+        },
+        "of:0000000000000003/8" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1005::3ff/120" ],
+                    "vlan-tagged": [20]
+                }
+            ]
+        },
+	"of:0000000000000003/9" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1006::3ff/120" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000003/10" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.2.30.254/24" ],
+                    "vlan-untagged": 15
+                }
+            ]
+        },
+        "of:0000000000000003/11" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.2.20.254/24" ],
+                    "vlan-tagged": [30]
+                }
+            ]
+        },
+        "of:0000000000000003/12" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.2.10.254/24" ],
+                    "vlan-tagged": [20]
+                }
+            ]
+        },
+	"of:0000000000000003/13" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.2.40.254/24" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000004/6" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1007::3ff/120" ],
+                    "vlan-untagged": 30
+                }
+            ]
+        },
+        "of:0000000000000004/7" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1008::3ff/120" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000004/8" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1009::3ff/120" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000004/9" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.3.0.254/24" ],
+                    "vlan-untagged": 30
+                }
+            ]
+        },
+        "of:0000000000000004/10" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.3.10.254/24" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000004/11" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.3.30.254/24" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000004/12" : {
+            "interfaces" : [
+                {
+			"ips" : [ "10.0.1.254/24", "10.0.7.254/24", "2000::1ff/120", "2000::7ff/120" ],
+			"vlan-tagged": [110, 170]
+
+                }
+            ]
+        },
+        "of:0000000000000004/13" : {
+            "interfaces" : [
+                {
+			"ips" : [ "10.0.1.254/24", "2000::1ff/120"],
+			"vlan-untagged": 110
+
+                }
+            ]
+        },
+        "of:0000000000000004/14" : {
+            "interfaces" : [
+                {
+			"ips" : [ "10.0.7.254/24", "2000::7ff/120" ],
+			"vlan-untagged": 170
+
+                }
+            ]
+        },
+        "of:0000000000000005/6" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1008::3ff/120" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000005/7" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1009::3ff/120" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000005/8" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "1010::3ff/120" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000005/9" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.3.10.254/24" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000005/10" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.3.30.254/24" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000005/11" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.3.20.254/24" ],
+                    "vlan-tagged": [40]
+                }
+            ]
+        },
+        "of:0000000000000005/12" : {
+            "interfaces" : [
+                {
+                       "ips" : [ "10.0.5.254/24", "10.0.6.254/24", "2000::5ff/120", "2000::6ff/120" ],
+	               "vlan-tagged": [150, 160]
+                }
+            ]
+        },
+        "of:0000000000000005/13" : {
+            "interfaces" : [
+                {
+                       "ips" : [ "10.0.5.254/24", "2000::5ff/120"],
+	               "vlan-untagged": 150
+                }
+            ]
+        },
+        "of:0000000000000005/14" : {
+            "interfaces" : [
+                {
+                       "ips" : [ "10.0.6.254/24", "2000::6ff/120" ],
+	               "vlan-untagged": 160
+                }
+            ]
+        },
+        "of:0000000000000005/15" : {
+            "interfaces" : [
+                {
+                    "ips" : [ "10.0.3.254/24", "2000::3ff/120" ],
+                    "vlan-untagged": 15
+                }
+            ]
+        }
+    },
+    "hosts" : {
+	"00:BB:00:00:01:0A/10" : {
+		"basic": {
+			"locations": ["of:0000000000000006/3"],
+			"ips": ["1011::3fe"]
+		     }
+	    },
+	"00:bb:00:00:00:04/30" : {
+		"basic": {
+			"locations": ["of:0000000000000003/7","of:0000000000000002/8"],
+			"ips": ["1004::3fe"]
+		     }
+	    },
+	"00:bb:00:00:00:05/20" : {
+		"basic": {
+			"locations": ["of:0000000000000003/8"],
+			"ips": ["1005::3fe"]
+		     }
+	    },
+	"00:bb:00:00:01:05/40" : {
+		"basic": {
+			"locations": ["of:0000000000000003/9"],
+			"ips": ["1006::3fe"]
+		     }
+	    },
+	"00:bb:00:00:00:07/40" : {
+		"basic": {
+			"locations": ["of:0000000000000005/6", "of:0000000000000004/7"],
+			"ips": ["1008::3fe"]
+		     }
+	    },
+	"00:bb:00:00:00:08/40" : {
+		"basic": {
+			"locations": ["of:0000000000000004/8","of:0000000000000005/7"],
+			"ips": ["1009::3fe"]
+		     }
+	    },
+	"00:bb:00:00:00:0A/40" : {
+		"basic": {
+			"locations": ["of:0000000000000005/8"],
+			"ips": ["1010::3fe"]
+		     }
+	    }
+    },
+    "devices" : {
+	"of:0000000000000006" : {
+            "segmentrouting" : {
+                "name" : "s006",
+                "ipv4NodeSid" : 1006,
+		"ipv6NodeSid" : 2006,
+		"ipv6Loopback" : "2000::c0a8:0006",
+                "ipv4Loopback" : "192.168.0.6",
+                "routerMac" : "00:00:00:00:00:06",
+                "isEdgeRouter" : true,
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s006",
+                "driver" : "ofdpa-ovs",
+		"latitude":30,
+		"longitude":-110
+            }
+        },
+        "of:0000000000000103" : {
+            "segmentrouting" : {
+                "name" : "s103",
+                "ipv4NodeSid" : 1103,
+                "ipv4Loopback" : "192.168.0.103",
+		"ipv6NodeSid" : 2103,
+		"ipv6Loopback" : "2000::c0a8:0203",
+                "routerMac" : "00:00:00:00:01:03",
+                "isEdgeRouter" : false,
+                "adjacencySids" : []
+            },
+            "basic" : {
+                 "name" : "s103",
+                 "driver" : "ofdpa-ovs",
+		 "latitude":35,
+		 "longitude":-115
+            }
+        },
+        "of:0000000000000104" : {
+            "segmentrouting" : {
+                "name" : "s104",
+                "ipv4NodeSid" : 1104,
+                "ipv4Loopback" : "192.168.0.104",
+		"ipv6NodeSid" : 2104,
+		"ipv6Loopback" : "2000::c0a8:0204",
+                "routerMac" : "00:00:00:00:01:04",
+                "isEdgeRouter" : false,
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s104",
+                 "driver" : "ofdpa-ovs",
+		 "latitude":35,
+		 "longitude":-110
+            }
+    	},
+        "of:0000000000000001" : {
+            "segmentrouting" : {
+                "name" : "s001",
+                "ipv4NodeSid" : 1001,
+		"ipv6NodeSid" : 2001,
+		"ipv6Loopback" : "2000::c0a8:0001",
+                "ipv4Loopback" : "192.168.0.1",
+                "routerMac" : "00:00:00:00:00:01",
+                "isEdgeRouter" : true,
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s001",
+                "driver" : "ofdpa-ovs",
+		"latitude":30,
+		"longitude":-105
+            }
+        },
+        "of:0000000000000002" : {
+            "segmentrouting" : {
+                "name" : "s002",
+                "ipv4NodeSid" : 1002,
+                "ipv4Loopback" : "192.168.0.2",
+		"ipv6NodeSid" : 2002,
+		"ipv6Loopback" : "2000::c0a8:0002",
+                "routerMac" : "00:00:00:00:00:02",
+                "isEdgeRouter" : true,
+                "pairLocalPort" : 5,
+                "pairDeviceId": "of:0000000000000003",
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s002",
+                "driver" : "ofdpa-ovs",
+		"latitude":34,
+		"longitude":-95
+            }
+        },
+        "of:0000000000000003" : {
+            "segmentrouting" : {
+                "name" : "s003",
+                "ipv4NodeSid" : 1003,
+                "ipv4Loopback" : "192.168.0.3",
+        	"ipv6NodeSid" : 2003,
+		"ipv6Loopback" : "2000::c0a8:0003",
+                "routerMac" : "00:00:00:00:00:02",
+                "isEdgeRouter" : true,
+                "pairLocalPort" : 5,
+                "pairDeviceId": "of:0000000000000002",
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s003",
+                "driver" : "ofdpa-ovs",
+		"latitude":34,
+		"longitude":-90
+            }
+        },
+        "of:0000000000000004" : {
+            "segmentrouting" : {
+                "name" : "s004",
+                "ipv4NodeSid" : 1004,
+                "ipv4Loopback" : "192.168.0.4",
+		"ipv6NodeSid" : 2004,
+		"ipv6Loopback" : "2000::c0a8:0004",
+                "routerMac" : "00:00:00:00:00:04",
+                "isEdgeRouter" : true,
+                "pairLocalPort" : 5,
+                "pairDeviceId": "of:0000000000000005",
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s004",
+                "driver" : "ofdpa-ovs",
+		"latitude":34,
+		"longitude":-85
+            }
+        },
+        "of:0000000000000005" : {
+            "segmentrouting" : {
+                "name" : "s005",
+                "ipv4NodeSid" : 1005,
+                "ipv4Loopback" : "192.168.0.5",
+		"ipv6NodeSid" : 2005,
+		"ipv6Loopback" : "2000::c0a8:0005",
+                "routerMac" : "00:00:00:00:00:04",
+                "isEdgeRouter" : true,
+                "pairLocalPort" : 5,
+                "pairDeviceId": "of:0000000000000004",
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s005",
+                "driver" : "ofdpa-ovs",
+		"latitude":34,
+		"longitude":-80
+            }
+        },
+        "of:0000000000000101" : {
+            "segmentrouting" : {
+                "name" : "s101",
+                "ipv4NodeSid" : 1101,
+                "ipv4Loopback" : "192.168.0.101",
+		"ipv6NodeSid" : 2101,
+		"ipv6Loopback" : "2000::c0a8:0101",
+                "routerMac" : "00:00:00:00:01:01",
+                "isEdgeRouter" : false,
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s101",
+                "driver" : "ofdpa-ovs",
+		"latitude":42,
+                "longitude":-100
+            }
+        },
+        "of:0000000000000102" : {
+            "segmentrouting" : {
+                "name" : "s102",
+                "ipv4NodeSid" : 1102,
+                "ipv4Loopback" : "192.168.0.102",
+		"ipv6NodeSid" : 2102,
+		"ipv6Loopback" : "2000::c0a8:0202",
+                "routerMac" : "00:00:00:00:01:02",
+                "isEdgeRouter" : false,
+                "adjacencySids" : []
+            },
+            "basic" : {
+                "name" : "s102",
+                 "driver" : "ofdpa-ovs",
+		 "latitude":42,
+		 "longitude":-95
+            }
+        }
+    },
+    "apps" : {
+        "org.onosproject.dhcprelay" : {
+            "default": [
+                {
+                    "dhcpServerConnectPoint": "of:0000000000000005/15",
+                    "serverIps": ["10.0.3.253", "2000::3fd"]
+                }
+            ]
+        }
+    }
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE101.linkFailureChart b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE101.linkFailureChart
new file mode 100644
index 0000000..8a9e052
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE101.linkFailureChart
@@ -0,0 +1,8 @@
+{
+    "link_batch_1" : { "links" : { "link1" : ["leaf2", "spine101"] },
+                       "links_before" : 48,
+                       "links_after" : 44 },
+    "link_batch_2" : { "links" : { "link1" : ["leaf2", "spine102"] },
+                       "links_before" : 48,
+                       "links_after" : 44 }
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE102.linkFailureChart b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE102.linkFailureChart
new file mode 100644
index 0000000..f102be4
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE102.linkFailureChart
@@ -0,0 +1,9 @@
+{
+    "link_batch_1" : { "links" : { "link1" : ["leaf4", "spine101"] },
+                       "links_before" : 48,
+                       "links_after" : 44 },
+    "link_batch_2" : { "links" : { "link1" : ["leaf4", "spine102"] },
+                       "links_before" : 48,
+                       "links_after" : 44 }
+}
+
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE103.linkFailureChart b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE103.linkFailureChart
new file mode 100644
index 0000000..8041a05
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/linkFailure/CASE103.linkFailureChart
@@ -0,0 +1,9 @@
+{
+    "link_batch_1" : { "links" : { "link1" : ["spine103", "spine101"] },
+                       "links_before" : 48,
+                       "links_after" : 46 },
+    "link_batch_2" : { "links" : { "link1" : ["spine104", "spine102"] },
+                       "links_before" : 48,
+                       "links_after" : 46 }
+}
+
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE001.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE001.multicastConfig
new file mode 100644
index 0000000..990507e
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE001.multicastConfig
@@ -0,0 +1,48 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE002.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE002.multicastConfig
new file mode 100644
index 0000000..14f770e
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE002.multicastConfig
@@ -0,0 +1,46 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:06/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h8v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:06/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h8v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE003.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE003.multicastConfig
new file mode 100644
index 0000000..ffd2e6c
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE003.multicastConfig
@@ -0,0 +1,46 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE004.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE004.multicastConfig
new file mode 100644
index 0000000..8fc69d1
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE004.multicastConfig
@@ -0,0 +1,54 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None", "00:AA:00:00:00:06/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                },
+                {
+                    "host": "h8v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None", "00:BB:00:00:00:06/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                },
+                {
+                    "host": "h8v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE005.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE005.multicastConfig
new file mode 100644
index 0000000..7d089ae
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE005.multicastConfig
@@ -0,0 +1,52 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:06/None", "00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h8v4"
+                },
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:06/None", "00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h8v6"
+                },
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE006.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE006.multicastConfig
new file mode 100644
index 0000000..9c1029a
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE006.multicastConfig
@@ -0,0 +1,54 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None", "00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                },
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None", "00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                },
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE007.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE007.multicastConfig
new file mode 100644
index 0000000..218ed4d
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE007.multicastConfig
@@ -0,0 +1,60 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None", "00:AA:00:00:00:06/None", "00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                },
+                {
+                    "host": "h8v4"
+                },
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None", "00:BB:00:00:00:06/None", "00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                },
+                {
+                    "host": "h8v6"
+                },
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE008.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE008.multicastConfig
new file mode 100644
index 0000000..218ed4d
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE008.multicastConfig
@@ -0,0 +1,60 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None", "00:AA:00:00:00:06/None", "00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                },
+                {
+                    "host": "h8v4"
+                },
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None", "00:BB:00:00:00:06/None", "00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                },
+                {
+                    "host": "h8v6"
+                },
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE101.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE101.multicastConfig
new file mode 100644
index 0000000..218ed4d
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE101.multicastConfig
@@ -0,0 +1,60 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None", "00:AA:00:00:00:06/None", "00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                },
+                {
+                    "host": "h8v4"
+                },
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None", "00:BB:00:00:00:06/None", "00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                },
+                {
+                    "host": "h8v6"
+                },
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE102.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE102.multicastConfig
new file mode 100644
index 0000000..218ed4d
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE102.multicastConfig
@@ -0,0 +1,60 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None", "00:AA:00:00:00:06/None", "00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                },
+                {
+                    "host": "h8v4"
+                },
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None", "00:BB:00:00:00:06/None", "00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                },
+                {
+                    "host": "h8v6"
+                },
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE103.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE103.multicastConfig
new file mode 100644
index 0000000..218ed4d
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE103.multicastConfig
@@ -0,0 +1,60 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None", "00:AA:00:00:00:06/None", "00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                },
+                {
+                    "host": "h8v4"
+                },
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None", "00:BB:00:00:00:06/None", "00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                },
+                {
+                    "host": "h8v6"
+                },
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE201.multicastConfig b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE201.multicastConfig
new file mode 100644
index 0000000..218ed4d
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/multicast/CASE201.multicastConfig
@@ -0,0 +1,60 @@
+[
+    {
+        "ipVersion": 4,
+        "sIP": "10.2.0.1",
+        "group": "224.2.0.1",
+        "sPorts": ["of:0000000000000002/9"],
+        "dHosts": ["00:AA:00:00:00:03/None", "00:AA:00:00:00:06/None", "00:AA:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v4",
+                "interface": "h3v4-eth0",
+                "Ether": "01:00:5e:02:00:01",
+                "UDP": 40051,
+                "filter": "ip multicast and dst host 224.2.0.1 and udp dst port 40051",
+                "packet": "dst=01:00:5e:02:00:01 src=00:aa:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v4",
+                    "interface": "h4v4-bond0"
+                },
+                {
+                    "host": "h8v4"
+                },
+                {
+                    "host": "h1v4"
+                }
+            ]
+        }
+    },
+    {
+        "ipVersion": 6,
+        "sIP": "1002::3fe",
+        "group": "ff08::3fe",
+        "sPorts": ["of:0000000000000002/6"],
+        "dHosts": ["00:BB:00:00:00:03/None", "00:BB:00:00:00:06/None", "00:BB:00:00:00:01/None"],
+        "scapy": {
+            "src": {
+                "host": "h3v6",
+                "interface": "h3v6-eth0",
+                "Ether": "33:33:00:00:03:fe",
+                "UDP": 40051,
+                "filter": "ip6 multicast and dst host ff08::3fe and udp dst port 40051",
+                "packet": "dst=33:33:00:00:03:fe src=00:bb:00:00:00:02"
+            },
+            "dst": [
+                {
+                    "host": "h4v6",
+                    "interface": "h4v6-bond0"
+                },
+                {
+                    "host": "h8v6"
+                },
+                {
+                    "host": "h1v6"
+                }
+            ]
+        }
+    }
+]
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/switchFailure/CASE201.switchFailureChart b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/switchFailure/CASE201.switchFailureChart
new file mode 100644
index 0000000..6614e5f
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/dependencies/switchFailure/CASE201.switchFailureChart
@@ -0,0 +1,18 @@
+{
+    "spine101": { "switches_before_failure": 10,
+                  "links_before_failure": 48,
+                  "switches_after_failure": 9,
+                  "links_after_failure": 30 },
+    "spine102": { "switches_before_failure": 10,
+                  "links_before_failure": 48,
+                  "switches_after_failure": 9,
+                  "links_after_failure": 30 },
+    "spine103": { "switches_before_failure": 10,
+                  "links_before_failure": 48,
+                  "switches_after_failure": 9,
+                  "links_after_failure": 42 },
+    "spine104": { "switches_before_failure": 10,
+                  "links_before_failure": 48,
+                  "switches_after_failure": 9,
+                  "links_after_failure": 42 }
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.params b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.params
index 1b6aec0..e8199bd 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.params
+++ b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.params
@@ -43,7 +43,4 @@
         <balanceMasterSleep>10</balanceMasterSleep>
     </timers>
 
-    <SLEEP>
-        <startup>10</startup>
-    </SLEEP>
 </PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 3afb6d3..9d901f1 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -67,12 +67,12 @@
             main.forHost = "host/"
             main.forSwitchFailure = "switchFailure/"
             main.forLinkFailure = "linkFailure/"
+            main.forMulticast = "multicast/"
             main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
             main.topologyLib = main.params[ 'DEPENDENCY' ][ 'lib' ] if 'lib' in main.params[ 'DEPENDENCY' ] else None
             main.topologyConf = main.params[ 'DEPENDENCY' ][ 'conf' ] if 'conf' in main.params[ 'DEPENDENCY' ] else None
             main.scale = ( main.params[ 'SCALE' ][ 'size' ] ).split( "," )
             main.maxNodes = int( main.params[ 'SCALE' ][ 'max' ] )
-            main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
 
             stepResult = main.testSetUp.envSetup( False )
         except Exception as e:
@@ -160,8 +160,14 @@
     @staticmethod
     def loadLinkFailureChart( main ):
         with open( "%s%s.linkFailureChart" % ( main.configPath + main.forLinkFailure,
-                                                 main.cfgName ) ) as sfc:
-            main.linkFailureChart = json.load( sfc )
+                                                 main.cfgName ) ) as lfc:
+            main.linkFailureChart = json.load( lfc )
+
+    @staticmethod
+    def loadMulticastConfig( main ):
+        with open( "%s%s.multicastConfig" % ( main.configPath + main.forMulticast,
+                                                 main.cfgName ) ) as cfg:
+            main.multicastConfig = json.load( cfg )
 
     @staticmethod
     def startMininet( main, topology, args="" ):
@@ -681,6 +687,16 @@
         except ( NameError, AttributeError ):
             main.utils = Utils()
 
+        if hasattr( main, "scapyHosts" ):
+            scapyResult = main.TRUE
+            for host in main.scapyHosts:
+                scapyResult = host.stopScapy() and scapyResult
+                main.log.info( "Stopped Scapy Host: {0}".format( host.name ) )
+            for host in main.scapyHosts:
+                scapyResult = main.Scapy.removeHostComponent( host.name ) and scapyResult
+                main.log.info( "Removed Scapy Host Component: {0}".format( host.name ) )
+            main.scapyHosts = []
+
         if hasattr( main, 'Mininet1' ):
             main.utils.mininetCleanup( main.Mininet1 )
 
@@ -939,3 +955,71 @@
                 cfg[ "ports" ][ connectPoint ][ "interfaces" ][ 0 ][ "vlan-native" ] = native
 
         main.Cluster.active( 0 ).REST.setNetCfg( json.loads( json.dumps( cfg ) ) )
+
+    @staticmethod
+    def startScapyHosts( main ):
+        """
+        Create host components and start Scapy CLIs
+        """
+        main.step( "Start Scapy CLIs" )
+        main.scapyHostNames = main.params[ 'SCAPY' ][ 'HOSTNAMES' ].split( ',' )
+        main.scapyHosts = []
+        for hostName in main.scapyHostNames:
+            main.Scapy.createHostComponent( hostName )
+            main.scapyHosts.append( getattr( main, hostName ) )
+        for host in main.scapyHosts:
+            host.startHostCli()
+            host.startScapy()
+            host.updateSelf()
+            main.log.debug( host.name )
+            main.log.debug( host.hostIp )
+            main.log.debug( host.hostMac )
+
+    @staticmethod
+    def verifyMulticastTraffic( main, entry, expect, skipOnFail=False ):
+        """
+        Verify multicast traffic using scapy
+        """
+        srcEntry = entry["scapy"]["src"]
+        for dstEntry in entry["scapy"]["dst"]:
+            # Set up scapy receiver
+            receiver = getattr( main, dstEntry["host"] )
+            if "interface" in dstEntry.keys():
+                receiver.startFilter( ifaceName=dstEntry["interface"], pktFilter=srcEntry["filter"] )
+            else:
+                receiver.startFilter( pktFilter=srcEntry["filter"] )
+            # Set up scapy sender
+            main.Network.addRoute( str( srcEntry["host"] ),
+                                   str( entry["group"] ),
+                                   str( srcEntry["interface"] ),
+                                   True if entry["ipVersion"] == 6 else False )
+            sender = getattr( main, srcEntry["host"] )
+            sender.buildEther( dst=str( srcEntry["Ether"] ) )
+            if entry["ipVersion"] == 4:
+                sender.buildIP( dst=str( entry["group"] ) )
+            elif entry["ipVersion"] == 6:
+                sender.buildIPv6( dst=str( entry["group"] ) )
+            sender.buildUDP( ipVersion=entry["ipVersion"], dport=srcEntry["UDP"] )
+            # Send packet and check received packet
+            sender.sendPacket( iface=srcEntry["interface"] )
+            finished = receiver.checkFilter()
+            packet = ""
+            if finished:
+                packets = receiver.readPackets()
+                for packet in packets.splitlines():
+                    main.log.debug( packet )
+            else:
+                kill = receiver.killFilter()
+                main.log.debug( kill )
+                sender.handle.sendline( "" )
+                sender.handle.expect( sender.scapyPrompt )
+                main.log.debug( sender.handle.before )
+            packetCaptured = True if srcEntry["packet"] in packet else False
+            utilities.assert_equals( expect=expect,
+                                     actual=packetCaptured,
+                                     onpass="Pass",
+                                     onfail="Fail" )
+            if skipOnFail and packetCaptured != expect:
+                Testcaselib.saveOnosDiagnostics( main )
+                Testcaselib.cleanup( main, copyKarafLog=False )
+                main.skipCase()