diff --git a/TestON/tests/PeeringRouterTest/PeeringRouterTest.params b/TestON/tests/PeeringRouterTest/PeeringRouterTest.params
index f12ada9..0c4af63 100755
--- a/TestON/tests/PeeringRouterTest/PeeringRouterTest.params
+++ b/TestON/tests/PeeringRouterTest/PeeringRouterTest.params
@@ -1,11 +1,11 @@
 <PARAMS>
     
-    <testcases>4</testcases>
+    <testcases>5,7,8,9,31,32</testcases>
 
     #Environment variables
     <ENV>
         <cellName>sdnip_single_instance</cellName>
-        <home>/home/tutorial1/ONLabTest/TestON/tests/PeeringRouterTest</home>
+        <home>/home/admin/ONLabTest/TestON/tests/PeeringRouterTest</home>
     </ENV>
 
     <CTRL>
diff --git a/TestON/tests/PeeringRouterTest/PeeringRouterTest.py b/TestON/tests/PeeringRouterTest/PeeringRouterTest.py
index 9de5845..fec9365 100755
--- a/TestON/tests/PeeringRouterTest/PeeringRouterTest.py
+++ b/TestON/tests/PeeringRouterTest/PeeringRouterTest.py
@@ -319,6 +319,13 @@
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
 
+        # Copy the cfg files to config dir
+        main.log.info("Copying two cfg files to onos etc folder")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
@@ -543,6 +550,13 @@
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
 
+        # Copy the cfg files to config dir
+        main.log.info("Copying two cfg files to onos etc folder")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
@@ -720,6 +734,13 @@
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
 
+        # Copy the cfg files to config dir
+        main.log.info("Copying two cfg files to onos etc folder")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
@@ -762,6 +783,7 @@
         main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
         main.log.info("Add the route finally and wait for 10 sec")
 
+        #============================= Ping Test ========================
         for j in range(0, 30):
             r = main.Mininet.pingHost(SRC="as6host", TARGET="3.0.0.1")
 
@@ -949,6 +971,13 @@
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
 
+        # Copy the cfg files to config dir
+        main.log.info("Copying two cfg files to onos etc folder")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
@@ -1083,6 +1112,19 @@
             main.log.report(
                 "***Routes in SDN-IP after convergence are wrong!***" )
 
+        #============================= Ping Test ========================
+        pingTestResults = main.TRUE
+        for m in range( 3, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Default connectivity check PASS",
+                                  onfail="Default connectivity check FAIL")
+
         #============= Flap the BGP session between QuaggaCliHost4 and ONOS ==================
         main.log.info( "Disabling bgp session and enable it 20 times very fast between QuaggaCliHost4 and 192.168.30.101:" )
         for i in range(0, 20):
@@ -1129,6 +1171,19 @@
             main.log.report(
                 "***Routes in SDN-IP after convergence are wrong!***" )
 
+        #============================= Ping Test ========================
+        pingTestResults = main.TRUE
+        for m in range( 3, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Default connectivity check PASS",
+                                  onfail="Default connectivity check FAIL")
+
         main.ONOScli.logout()
         main.log.info("ONOS cli logout")
         time.sleep(20);
@@ -1217,6 +1272,13 @@
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
 
+        # Copy the cfg files to config dir
+        main.log.info("Copying two cfg files to onos etc folder")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
@@ -1518,6 +1580,13 @@
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
 
+        # Copy the cfg files to config dir
+        main.log.info("Copying two cfg files to onos etc folder")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
@@ -1825,6 +1894,13 @@
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
 
+        # Copy the cfg files to config dir
+        main.log.info("Copying two cfg files to onos etc folder")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
@@ -1913,17 +1989,33 @@
                 "***Routes in SDN-IP after adding routes are wrong!***" )
 
         #============================= Ping Test ========================
-        pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
-        main.log.info("Ping test result")
-        if pingTestResults:
-            main.log.info("Test succeeded")
-        else:
-            main.log.info("Test failed")
-       
+        pingTestResults = main.TRUE
+        sources = ["as2host", "as3host", "as6host"]
+        targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
+        for source in sources:
+            for target in targets:
+                r = main.Mininet.pingHost(SRC=source, TARGET=target)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Router connectivity check PASS",
+                                  onfail="Router connectivity check FAIL")
+
+        pingTestResults = main.TRUE
+        for m in range( 3, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
         utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
                                   onpass="Default connectivity check PASS",
                                   onfail="Default connectivity check FAIL")
 
+        time.sleep(20)
+
         #============= Disconnect the BGP session between QuaggaCliHost4 and ONOS ==================
         main.log.info( "Disabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
         main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513" )
@@ -1964,17 +2056,33 @@
                 "***Routes in SDN-IP after convergence are wrong!***" )
 
         #============================= Ping Test ========================
-        pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
-        main.log.info("Ping test result")
-        if pingTestResults:
-            main.log.info("Test succeeded")
-        else:
-            main.log.info("Test failed")
-       
+        pingTestResults = main.TRUE
+        sources = ["as2host", "as3host", "as6host"]
+        targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
+        for source in sources:
+            for target in targets:
+                r = main.Mininet.pingHost(SRC=source, TARGET=target)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Router connectivity check PASS",
+                                  onfail="Router connectivity check FAIL")
+
+        pingTestResults = main.TRUE
+        for m in range( 3, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
         utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
                                   onpass="Default connectivity check PASS",
                                   onfail="Default connectivity check FAIL")
 
+        time.sleep(20)
+
         #============= Enabling the BGP session between QuaggaCliHost4 and ONOS ==================
         main.log.info( "Enabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
         main.QuaggaCliHost4.enable_bgp_peer( "192.168.30.101", "64513" )
@@ -2050,17 +2158,20 @@
             main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
 
         #============================= Ping Test ========================
-        pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllFail( "1.168.30.100" )
-        main.log.info("Ping test result")
-        if pingTestResults:
-            main.log.info("Test succeeded")
-        else:
-            main.log.info("Test failed")
+        pingTestResults = main.TRUE
+        for m in range( 4, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.TRUE:
+                    pingTestResults = main.FALSE
 
         utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
                                   onpass="disconnect check PASS",
                                   onfail="disconnect check FAIL")
 
+        time.sleep(20);
+
         main.ONOScli.logout()
         main.ONOSbench.onosStop(ONOS1Ip);
         main.Mininet.stopNet()
@@ -2144,6 +2255,13 @@
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
 
+        # Copy the cfg files to config dir
+        main.log.info("Copying two cfg files to onos etc folder")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.ONOSbench.handle.sendline("cp " + TESTCASE_ROOT_PATH + "/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg ~/onos/tools/package/etc/")
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
@@ -2214,17 +2332,33 @@
                 "***Routes in SDN-IP after adding routes are wrong!***" )
 
         #============================= Ping Test ========================
-        pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
-        main.log.info("Ping test result")
-        if pingTestResults:
-            main.log.info("Test succeeded")
-        else:
-            main.log.info("Test failed")
-       
+        pingTestResults = main.TRUE
+        sources = ["as2host", "as3host", "as6host"]
+        targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
+        for source in sources:
+            for target in targets:
+                r = main.Mininet.pingHost(SRC=source, TARGET=target)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Router connectivity check PASS",
+                                  onfail="Router connectivity check FAIL")
+
+        pingTestResults = main.TRUE
+        for m in range( 3, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
         utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
                                   onpass="Default connectivity check PASS",
                                   onfail="Default connectivity check FAIL")
 
+        time.sleep(20)
+
         #============= Disconnect the BGP session between QuaggaCliHost4 and ONOS ==================
         main.log.info( "Disabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
         main.QuaggaCliHost4.disable_bgp_peer( "192.168.30.101", "64513" )
@@ -2265,17 +2399,33 @@
                 "***Routes in SDN-IP after convergence are wrong!***" )
 
         #============================= Ping Test ========================
-        pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
-        main.log.info("Ping test result")
-        if pingTestResults:
-            main.log.info("Test succeeded")
-        else:
-            main.log.info("Test failed")
-       
+        pingTestResults = main.TRUE
+        sources = ["as2host", "as3host", "as6host"]
+        targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
+        for source in sources:
+            for target in targets:
+                r = main.Mininet.pingHost(SRC=source, TARGET=target)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Router connectivity check PASS",
+                                  onfail="Router connectivity check FAIL")
+
+        pingTestResults = main.TRUE
+        for m in range( 3, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
         utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
                                   onpass="Default connectivity check PASS",
                                   onfail="Default connectivity check FAIL")
 
+        time.sleep(20)
+
         #============= Enabling the BGP session between QuaggaCliHost4 and ONOS ==================
         main.log.info( "Enabling bgp session between QuaggaCliHost4 and 192.168.30.101:" )
         main.QuaggaCliHost4.enable_bgp_peer( "192.168.30.101", "64513" )
@@ -2316,17 +2466,33 @@
                 "***Routes in SDN-IP after convergence are wrong!***" )
 
         #============================= Ping Test ========================
-        pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllPass( "1.168.30.100" )
-        main.log.info("Ping test result")
-        if pingTestResults:
-            main.log.info("Test succeeded")
-        else:
-            main.log.info("Test failed")
-       
+        pingTestResults = main.TRUE
+        sources = ["as2host", "as3host", "as6host"]
+        targets = ["192.168.10.101", "192.168.20.101", "192.168.30.101", "192.168.60.101"]
+        for source in sources:
+            for target in targets:
+                r = main.Mininet.pingHost(SRC=source, TARGET=target)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Router connectivity check PASS",
+                                  onfail="Router connectivity check FAIL")
+
+        pingTestResults = main.TRUE
+        for m in range( 3, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.FALSE:
+                    pingTestResults = main.FALSE
+
         utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
                                   onpass="Default connectivity check PASS",
                                   onfail="Default connectivity check FAIL")
 
+        time.sleep(20)
+
         #============================= Deleting Routes ==================
         main.step( "Check deleting routes installed" )
         main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
@@ -2351,16 +2517,18 @@
             main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
 
         #============================= Ping Test ========================
-        pingTestResults = main.QuaggaCliHost.pingTestAndCheckAllFail( "1.168.30.100" )
-        main.log.info("Ping test result")
-        if pingTestResults:
-            main.log.info("Test succeeded")
-        else:
-            main.log.info("Test failed")
+        pingTestResults = main.TRUE
+        for m in range( 4, 6 ):
+            for n in range( 1, 10 ):
+                hostIp = str( m ) + ".0." + str( n ) + ".1"
+                r = main.Mininet.pingHost(SRC="as2host", TARGET=hostIp)
+                if r == main.TRUE:
+                    pingTestResults = main.FALSE
 
         utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
                                   onpass="disconnect check PASS",
                                   onfail="disconnect check FAIL")
+        time.sleep(20)
 
         main.ONOScli.logout()
         main.ONOSbench.onosStop(ONOS1Ip);
diff --git a/TestON/tests/PeeringRouterTest/PeeringRouterTest.topo b/TestON/tests/PeeringRouterTest/PeeringRouterTest.topo
index 440789e..a1e2c45 100755
--- a/TestON/tests/PeeringRouterTest/PeeringRouterTest.topo
+++ b/TestON/tests/PeeringRouterTest/PeeringRouterTest.topo
@@ -3,8 +3,8 @@
 
         <Mininet>
             <host>127.0.0.1</host>
-            <user>tutorial1</user>
-            <password>tutorial1</password>
+            <user>admin</user>
+            <password>onos_test</password>
             <type>MininetCliDriver</type>
             <connect_order>1</connect_order>
             <COMPONENTS> </COMPONENTS>
@@ -12,8 +12,8 @@
 
         <ONOSbench>
             <host>127.0.0.1</host>
-            <user>tutorial1</user>
-            <password>tutorial1</password>
+            <user>admin</user>
+            <password></password>
             <type>OnosDriver</type>
             <connect_order>2</connect_order>
             <COMPONENTS> 
@@ -23,8 +23,8 @@
 
         <ONOScli>
             <host>127.0.0.1</host>
-            <user>tutorial1</user>
-            <password>tutorial1</password>
+            <user>admin</user>
+            <password></password>
             <type>OnosCliDriver</type>
             <connect_order>3</connect_order>
             <COMPONENTS> 
@@ -34,8 +34,8 @@
 
         <ONOS1>
             <host>127.0.0.1</host>
-            <user>tutorial1</user>
-            <password>tutorial1</password>
+            <user>admin</user>
+            <password></password>
             <type>OnosDriver</type>
             <connect_order>4</connect_order>
             <COMPONENTS> 
@@ -45,7 +45,7 @@
 
         <QuaggaCliHost3>
             <host>1.168.30.2</host>
-            <user>tutorial1</user>
+            <user>admin</user>
             <password></password>
             <type>QuaggaCliDriver</type>
             <connect_order>5</connect_order>
@@ -53,7 +53,7 @@
         </QuaggaCliHost3>
         <QuaggaCliHost4>
             <host>1.168.30.3</host>
-            <user>tutorial1</user>
+            <user>admin</user>
             <password></password>
             <type>QuaggaCliDriver</type>
             <connect_order>6</connect_order>
@@ -61,7 +61,7 @@
         </QuaggaCliHost4>
         <QuaggaCliHost5>
             <host>1.168.30.5</host>
-            <user>tutorial1</user>
+            <user>admin</user>
             <password></password>
             <type>QuaggaCliDriver</type>
             <connect_order>7</connect_order>
@@ -69,7 +69,7 @@
         </QuaggaCliHost5>
         <QuaggaCliHost>
             <host>1.168.30.100</host>
-            <user>tutorial1</user>
+            <user>admin</user>
             <password></password>
             <type>QuaggaCliDriver</type>
             <connect_order>8</connect_order>
diff --git a/TestON/tests/PeeringRouterTest/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg b/TestON/tests/PeeringRouterTest/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg
new file mode 100644
index 0000000..5feaf1d
--- /dev/null
+++ b/TestON/tests/PeeringRouterTest/org.onosproject.openflow.controller.impl.OpenFlowControllerImpl.cfg
@@ -0,0 +1 @@
+corsaDpid = 00:00:00:00:00:00:00:01
diff --git a/TestON/tests/PeeringRouterTest/org.onosproject.provider.lldp.impl.LLDPLinkProvider.cfg b/TestON/tests/PeeringRouterTest/org.onosproject.provider.lldp.impl.LLDPLinkProvider.cfg
new file mode 100644
index 0000000..65c7bf3
--- /dev/null
+++ b/TestON/tests/PeeringRouterTest/org.onosproject.provider.lldp.impl.LLDPLinkProvider.cfg
@@ -0,0 +1,19 @@
+# Sample configuration for link discovery
+# Note that this file location is required for packaging onos and launching it in another localtion.
+# If you are launching onos locally, this configuration file would be placed at: $(KARAF_ROOT)/etc 
+
+#
+# Disable Link Dicovery Permanently (Note: changing this property at runtime will have NO effect)
+#
+disableLinkDiscovery = true
+
+#
+# Enable Broadcast Discovery Protocol
+#
+#useBDDP = false
+
+#
+# Disable LLDP's recieved from specific devices
+# Details of the devices are in the file configured below
+#
+#lldpSuppression = 
diff --git a/TestON/tests/PeeringRouterTest/vlan/mininet/PeeringRouterMininetVlan.py b/TestON/tests/PeeringRouterTest/vlan/mininet/PeeringRouterMininetVlan.py
index c059c1a..9cbfc6d 100755
--- a/TestON/tests/PeeringRouterTest/vlan/mininet/PeeringRouterMininetVlan.py
+++ b/TestON/tests/PeeringRouterTest/vlan/mininet/PeeringRouterMininetVlan.py
@@ -30,7 +30,7 @@
 #QUAGGA_DIR = '/usr/local/sbin'
 QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
 
-QUAGGA_CONFIG_FILE_DIR = '/home/tutorial1/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
+QUAGGA_CONFIG_FILE_DIR = '/home/admin/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
 
 class VLANHost( Host ):
     "Host connected to VLAN interface"
