Bgp router testcase for route convergence
diff --git a/TestON/tests/PeeringRouterTest/PeeringRouterTest.py b/TestON/tests/PeeringRouterTest/PeeringRouterTest.py
index 10d9617..41460e1 100755
--- a/TestON/tests/PeeringRouterTest/PeeringRouterTest.py
+++ b/TestON/tests/PeeringRouterTest/PeeringRouterTest.py
@@ -59,12 +59,13 @@
         main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
         main.step("waiting 20 secs for all switches and quagga instances to comeup")
         time.sleep(20)
-        main.step("verifying mininet launch")
+        main.step( "Test whether Mininet is started" )
         main.log.info( "Login Quagga CLI on host3" )
         main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
         # all expected routes for all BGP peers
         allRoutesExpected = []
         main.step( "Start to generate routes for all BGP peers" )
+
         main.log.info( "Generate prefixes for host3" )
         prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
         main.log.info( prefixesHost3 )
@@ -79,18 +80,6 @@
         main.log.info( "Generate prefixes for host4" )
         prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
         main.log.info( prefixesHost4 )
-
-        # generate route with next hop
-        for prefix in prefixesHost3:
-            allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
-        routeIntentsExpectedHost3 = \
-            main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
-            prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
-            SDNIPJSONFILEPATH )
-
-        main.log.info( "Generate prefixes for host4" )
-        prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
-        main.log.info( prefixesHost4 )
         # generate route with next hop
         for prefix in prefixesHost4:
             allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
@@ -264,9 +253,10 @@
 
         main.case("The test case is to help to setup the TestON environment \
             and test new drivers" )
-        CURRENT_PATH = "/home/sdnip/TestON/tests/PeeringRouterTest/"
-        SDNIPJSONFILEPATH = \
-            "/home/sdnip/TestON/tests/PeeringRouterTest/sdnip.json"
+        TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
+        TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/mininet"
+        SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/sdnip.json"
+        main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
         # all expected routes for all BGP peers
         allRoutesExpected = []
         main.step( "Start to generate routes for all BGP peers" )
@@ -452,9 +442,9 @@
         # wait until all MultiPointToSinglePoint
         time.sleep( 10 )
         main.log.info("Start ping test")
-        pingTestScript = CURRENT_PATH + "CASE4-ping-as2host.sh"
+        pingTestScript = TESTCASE_ROOT_PATH + "CASE4-ping-as2host.sh"
         pingTestResultsFile = \
-        CURRENT_PATH + "CASE4-ping-results-before-delete-routes-" \
+        TESTCASE_ROOT_PATH + "CASE4-ping-results-before-delete-routes-" \
             + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
         pingTestResults = main.QuaggaCliHost.pingTest(
             "1.168.30.100", pingTestScript, pingTestResultsFile )
@@ -510,9 +500,9 @@
 
         time.sleep( 10 )
         main.log.info("Ping test after removing routs")
-        pingTestScript = CURRENT_PATH + "CASE4-ping-as2host.sh"
+        pingTestScript = TESTCASE_ROOT_PATH + "CASE4-ping-as2host.sh"
         pingTestResultsFile = \
-        CURRENT_PATH + "CASE4-ping-results-after-delete-routes-" \
+        TESTCASE_ROOT_PATH + "CASE4-ping-results-after-delete-routes-" \
             + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
         pingTestResults = main.QuaggaCliHost.pingTest(
             "1.168.30.100", pingTestScript, pingTestResultsFile )
@@ -523,307 +513,11 @@
         # main.step( "Test whether Mininet is started" )
         # main.Mininet2.handle.sendline( "xterm host1" )
         # main.Mininet2.handle.expect( "mininet>" )
+        main.ONOScli.disconnect()
+        main.ONOSbench.onosStop(ONOS1Ip);
 
-    def CASE3( self, main ):
-        """
-        Test the SDN-IP functionality
-        allRoutesExpected: all expected routes for all BGP peers
-        routeIntentsExpected: all expected MultiPointToSinglePointIntent intents
-        bgpIntentsExpected: expected PointToPointIntent intents
-        allRoutesActual: all routes from ONOS LCI
-        routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
-        ONOS CLI
-        bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
-        """
-        import time
-        import json
-        from operator import eq
-        # from datetime import datetime
-        from time import localtime, strftime
-
-        main.case( "The test case is to help to setup the TestON \
-            environment and test new drivers" )
-        # SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
-        TESTPATH = "/home/adnip/TestOn/tests/PeeringRouterTest/"
-        SDNIPJSONFILEPATH = \
-            "/home/sdnip/onos/tools/package/config/sdnip.json"
-        # all expected routes for all BGP peers
-        allRoutesExpected = []
-        main.step( "Start to generate routes for all BGP peers" )
-        main.log.info( "Generate prefixes for host3" )
-        prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
-        main.log.info( prefixesHost3 )
-        # generate route with next hop
-        for prefix in prefixesHost3:
-            allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
-        routeIntentsExpectedHost3 = \
-            main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
-            prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
-            SDNIPJSONFILEPATH )
-
-        main.log.info( "Generate prefixes for host4" )
-        prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
-        main.log.info( prefixesHost4 )
-        # generate route with next hop
-        for prefix in prefixesHost4:
-            allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
-        routeIntentsExpectedHost4 = \
-            main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
-            prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
-            SDNIPJSONFILEPATH )
-
-        routeIntentsExpected = routeIntentsExpectedHost3 + \
-            routeIntentsExpectedHost4
-
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-        main.step( "Set cell for ONOS-cli environment" )
-        main.ONOScli.setCell( cellName )
-        verifyResult = main.ONOSbench.verifyCell()
-
-        main.log.report( "Removing raft logs" )
-        main.ONOSbench.onosRemoveRaftLogs()
-        main.log.report( "Uninstalling ONOS" )
-        main.ONOSbench.onosUninstall( ONOS1Ip )
-
-        main.step( "Installing ONOS package" )
-        onos1InstallResult = main.ONOSbench.onosInstall(
-            options="-f", node=ONOS1Ip )
-
-        main.step( "Checking if ONOS is up yet" )
-        time.sleep( 60 )
-        onos1Isup = main.ONOSbench.isup( ONOS1Ip )
-        if not onos1Isup:
-            main.log.report( "ONOS1 didn't start!" )
-
-        main.step( "Start ONOS-cli" )
-
-        main.ONOScli.startOnosCli( ONOS1Ip )
-
-        main.step( "Get devices in the network" )
-        listResult = main.ONOScli.devices( jsonFormat=False )
-        main.log.info( listResult )
-        time.sleep( 10 )
-        main.log.info( "Installing sdn-ip feature" )
-        main.ONOScli.featureInstall( "onos-app-sdnip" )
-        time.sleep( 10 )
-        main.step( "Login all BGP peers and add routes into peers" )
-
-        main.log.info( "Login Quagga CLI on host3" )
-        main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
-        main.log.info( "Enter configuration model of Quagga CLI on host3" )
-        main.QuaggaCliHost3.enterConfig( 64514 )
-        main.log.info( "Add routes to Quagga on host3" )
-        main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
-        main.log.info( "Login Quagga CLI on host4" )
-        main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
-        main.log.info( "Enter configuration model of Quagga CLI on host4" )
-        main.QuaggaCliHost4.enterConfig( 64516 )
-        main.log.info( "Add routes to Quagga on host4" )
-        main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-
-        for i in range( 101, 201 ):
-            prefixesHostX = \
-                main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
-            main.log.info( prefixesHostX )
-            for prefix in prefixesHostX:
-                allRoutesExpected.append(
-                    prefix + "/" + "192.168.40." + str( i - 100 ) )
-
-            routeIntentsExpectedHostX = \
-                main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
-                prefixesHostX, "192.168.40." + str( i - 100 ),
-                "00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
-            routeIntentsExpected = routeIntentsExpected + \
-                routeIntentsExpectedHostX
-
-            main.log.info( "Login Quagga CLI on host" + str( i ) )
-            QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
-            QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
-            main.log.info(
-                "Enter configuration model of Quagga CLI on host" + str( i ) )
-            QuaggaCliHostX.enterConfig( 65000 + i - 100 )
-            main.log.info( "Add routes to Quagga on host" + str( i ) )
-            QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
-
-        time.sleep( 60 )
-
-        # get routes inside SDN-IP
-        getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
-        # parse routes from ONOS CLI
-        allRoutesActual = \
-            main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
-        allRoutesStrExpected = str( sorted( allRoutesExpected ) )
-        allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
-        main.step( "Check routes installed" )
-        main.log.info( "Routes expected:" )
-        main.log.info( allRoutesStrExpected )
-        main.log.info( "Routes get from ONOS CLI:" )
-        main.log.info( allRoutesStrActual )
-        utilities.assertEquals(
-            expect=allRoutesStrExpected, actual=allRoutesStrActual,
-            onpass="***Routes in SDN-IP are correct!***",
-            onfail="***Routes in SDN-IP are wrong!***" )
-        if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
-            main.log.report(
-                "***Routes in SDN-IP after adding routes are correct!***" )
-        else:
-            main.log.report(
-                "***Routes in SDN-IP after adding routes are wrong!***" )
-
-        time.sleep( 20 )
-        getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
-        main.step( "Check MultiPointToSinglePointIntent intents installed" )
-        # routeIntentsExpected are generated when generating routes
-        # get rpoute intents from ONOS CLI
-        routeIntentsActual = \
-            main.QuaggaCliHost3.extractActualRouteIntents(
-                getIntentsResult )
-        routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
-        routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
-        main.log.info( "MultiPointToSinglePoint intents expected:" )
-        main.log.info( routeIntentsStrExpected )
-        main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
-        main.log.info( routeIntentsStrActual )
-        utilities.assertEquals(
-            expect=True,
-            actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
-            onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
-            correct!***",
-            onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
-            wrong!***" )
-
-        if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
-            main.log.report(
-                "***MultiPointToSinglePoint Intents before deleting routes \
-                correct!***" )
-        else:
-            main.log.report(
-                "***MultiPointToSinglePoint Intents before deleting routes \
-                wrong!***" )
-
-        main.step( "Check BGP PointToPointIntent intents installed" )
-        # bgp intents expected
-        bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
-            SDNIPJSONFILEPATH )
-        # get BGP intents from ONOS CLI
-        bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
-            getIntentsResult )
-
-        bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
-        bgpIntentsStrActual = str( bgpIntentsActual )
-        main.log.info( "PointToPointIntent intents expected:" )
-        main.log.info( bgpIntentsStrExpected )
-        main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
-        main.log.info( bgpIntentsStrActual )
-
-        utilities.assertEquals(
-            expect=True,
-            actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
-            onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
-            onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
-        if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
-            main.log.report(
-                "***PointToPointIntent Intents in SDN-IP are correct!***" )
-        else:
-            main.log.report(
-                "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
-        #============================= Ping Test ========================
-        # wait until all MultiPointToSinglePoint
-        time.sleep( 20 )
-        pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
-        pingTestResultsFile = \
-        "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-before-delete-routes-" \
-            + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
-        pingTestResults = main.QuaggaCliHost.pingTest(
-            "1.168.30.100", pingTestScript, pingTestResultsFile )
-        main.log.info( pingTestResults )
-        time.sleep( 20 )
-
-        #============================= Deleting Routes ==================
-        main.step( "Check deleting routes installed" )
-        main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
-        main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
-        for i in range( 101, 201 ):
-            prefixesHostX = \
-                main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
-            main.log.info( prefixesHostX )
-            QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
-            QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
-
-        getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-        allRoutesActual = main.QuaggaCliHost3.extractActualRoutes(
-            getRoutesResult )
-        main.log.info( "allRoutes_actual = " )
-        main.log.info( allRoutesActual )
-
-        utilities.assertEquals(
-            expect="[]", actual=str( allRoutesActual ),
-            onpass="***Route number in SDN-IP is 0, correct!***",
-            onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
-        if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
-            main.log.report(
-                "***Routes in SDN-IP after deleting correct!***" )
-        else:
-            main.log.report(
-                "***Routes in SDN-IP after deleting wrong!***" )
-
-        main.step( "Check intents after deleting routes" )
-        getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-        routeIntentsActual = \
-            main.QuaggaCliHost3.extractActualRouteIntents(
-                getIntentsResult )
-        main.log.info( "main.ONOScli.intents()= " )
-        main.log.info( routeIntentsActual )
-        utilities.assertEquals(
-            expect="[]", actual=str( routeIntentsActual ),
-            onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
-            0, correct!***",
-            onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
-            0, wrong!***" )
-
-        if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
-            main.log.report(
-                "***MultiPointToSinglePoint Intents after deleting routes \
-                correct!***" )
-        else:
-            main.log.report(
-                "***MultiPointToSinglePoint Intents after deleting routes \
-                wrong!***" )
-
-        time.sleep( 20 )
-        pingTestScript = "~/SDNIP/test-tools/CASE3-ping-as2host.sh"
-        pingTestResultsFile = \
-        "~/SDNIP/SdnIpIntentDemo/log/CASE3-ping-results-after-delete-routes-" \
-            + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
-        pingTestResults = main.QuaggaCliHost.pingTest(
-            "1.168.30.100", pingTestScript, pingTestResultsFile )
-        main.log.info( pingTestResults )
-        time.sleep( 100 )
-
-        # main.step( "Test whether Mininet is started" )
-        # main.Mininet2.handle.sendline( "xterm host1" )
-        # main.Mininet2.handle.expect( "mininet>" )
-
-    def CASE1( self, main ):
-        """
-        Test the SDN-IP functionality
-        allRoutesExpected: all expected routes for all BGP peers
-        routeIntentsExpected: all expected MultiPointToSinglePointIntent \
-        intents
-        bgpIntentsExpected: expected PointToPointIntent intents
-        allRoutesActual: all routes from ONOS LCI
-        routeIntentsActual: actual MultiPointToSinglePointIntent intents \
-        from ONOS CLI
-        bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
-        """
+    # Route convergence and connectivity test
+    def CASE21( self, main):
         import time
         import json
         from operator import eq
@@ -832,22 +526,24 @@
 
         main.case("The test case is to help to setup the TestON environment \
             and test new drivers" )
-        SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
+        TESTCASE_ROOT_PATH = main.params[ 'ENV' ][ 'home' ]
+        TESTCASE_MININET_ROOT_PATH = TESTCASE_ROOT_PATH + "/routeconvergence/mininet"
+        SDNIPJSONFILEPATH = TESTCASE_ROOT_PATH + "/sdnip.json"
+        main.log.info("sdnip.json file path: "+ SDNIPJSONFILEPATH)
+        # Launch mininet topology for this case
+        MININET_TOPO_FILE = TESTCASE_MININET_ROOT_PATH + "/PeeringRouterConvergenceMininet.py"
+        main.step( "Launch mininet" )
+        main.Mininet.handle.sendline("sudo python " + MININET_TOPO_FILE + " " + TESTCASE_MININET_ROOT_PATH)
+        main.step("waiting 20 secs for all switches and quagga instances to comeup")
+        time.sleep(20)
+        main.step( "Test whether Mininet is started" )
+        main.log.info( "Login Quagga CLI on host3" )
+        main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
         # all expected routes for all BGP peers
         allRoutesExpected = []
         main.step( "Start to generate routes for all BGP peers" )
-        # bgpPeerHosts = []
-        # for i in range( 3, 5 ):
-        #    bgpPeerHosts.append( "host" + str( i ) )
-        # main.log.info( "BGP Peer Hosts are:" + bgpPeerHosts )
-
-        # for i in range( 3, 5 ):
-         #   QuaggaCliHost = "QuaggaCliHost" + str( i )
-          #  prefixes = main.QuaggaCliHost.generatePrefixes( 3, 10 )
-
-           # main.log.info( prefixes )
-            # allRoutesExpected.append( prefixes )
         main.log.info( "Generate prefixes for host3" )
+
         prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
         main.log.info( prefixesHost3 )
         # generate route with next hop
@@ -869,36 +565,39 @@
             prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
             SDNIPJSONFILEPATH )
 
+        main.log.info( "Generate prefixes for host5" )
+        prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
+        main.log.info( prefixesHost5 )
+        for prefix in prefixesHost5:
+            allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
+        routeIntentsExpectedHost5 = \
+            main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
+            prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
+            SDNIPJSONFILEPATH )
+
         routeIntentsExpected = routeIntentsExpectedHost3 + \
-            routeIntentsExpectedHost4
+            routeIntentsExpectedHost4 + routeIntentsExpectedHost5
 
         cellName = main.params[ 'ENV' ][ 'cellName' ]
         ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
         main.step( "Set cell for ONOS-cli environment" )
         main.ONOScli.setCell( cellName )
         verifyResult = main.ONOSbench.verifyCell()
+
         main.log.report( "Removing raft logs" )
         main.ONOSbench.onosRemoveRaftLogs()
         main.log.report( "Uninstalling ONOS" )
         main.ONOSbench.onosUninstall( ONOS1Ip )
-        main.step( "Creating ONOS package" )
-        packageResult = main.ONOSbench.onosPackage()
 
-        main.step( "Starting ONOS service" )
-        # TODO: start ONOS from Mininet Script
-        # startResult = main.ONOSbench.onosStart( "127.0.0.1" )
         main.step( "Installing ONOS package" )
         onos1InstallResult = main.ONOSbench.onosInstall(
             options="-f", node=ONOS1Ip )
 
-        main.step( "Checking if ONOS is up yet" )
-        time.sleep( 60 )
         onos1Isup = main.ONOSbench.isup( ONOS1Ip )
         if not onos1Isup:
             main.log.report( "ONOS1 didn't start!" )
 
         main.step( "Start ONOS-cli" )
-        # TODO: change the hardcode in startOnosCli method in ONOS CLI driver
 
         main.ONOScli.startOnosCli( ONOS1Ip )
 
@@ -906,10 +605,11 @@
         listResult = main.ONOScli.devices( jsonFormat=False )
         main.log.info( listResult )
         time.sleep( 10 )
-        main.log.info( "Installing sdn-ip feature" )
-        main.ONOScli.featureInstall( "onos-app-sdnip" )
+        main.log.info( "Installing gbprouter feature" )
+        main.ONOScli.featureInstall( "onos-app-bgprouter" )
         time.sleep( 10 )
         main.step( "Login all BGP peers and add routes into peers" )
+
         main.log.info( "Login Quagga CLI on host3" )
         main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
         main.log.info( "Enter configuration model of Quagga CLI on host3" )
@@ -923,14 +623,23 @@
         main.QuaggaCliHost4.enterConfig( 64516 )
         main.log.info( "Add routes to Quagga on host4" )
         main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-        time.sleep( 60 )
 
-        # get all routes inside SDN-IP
+        main.log.info( "Login Quagga CLI on host5" )
+        main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
+        main.log.info( "Enter configuration model of Quagga CLI on host5" )
+        main.QuaggaCliHost5.enterConfig( 64521 )
+        main.log.info( "Add routes to Quagga on host5" )
+        main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
+
+        #time.sleep( 30 )
+        time.sleep(10)
+
+        # get routes inside SDN-IP
         getRoutesResult = main.ONOScli.routes( jsonFormat=True )
 
         # parse routes from ONOS CLI
         allRoutesActual = \
-            main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
+           main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
 
         allRoutesStrExpected = str( sorted( allRoutesExpected ) )
         allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
@@ -950,91 +659,79 @@
             main.log.report(
                 "***Routes in SDN-IP after adding routes are wrong!***" )
 
-        time.sleep( 20 )
-        getIntentsResult = main.ONOScli.intents( jsonFormat=True )
+        #============================= 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")
+       
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Default connectivity check PASS",
+                                  onfail="Default connectivity check FAIL")
 
-        main.step( "Check MultiPointToSinglePointIntent intents installed" )
-        # routeIntentsExpected are generated when generating routes
-        # get rpoute intents from ONOS CLI
-        routeIntentsActual = \
-            main.QuaggaCliHost3.extractActualRouteIntents(
-                getIntentsResult )
-        routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
-        routeIntentsStrActual = str( routeIntentsActual ).replace( 'u', "" )
-        main.log.info( "MultiPointToSinglePoint intents expected:" )
-        main.log.info( routeIntentsStrExpected )
-        main.log.info( "MultiPointToSinglePoint intents get from ONOS CLI:" )
-        main.log.info( routeIntentsStrActual )
+        #============= 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" )
+        main.log.info( "Sleeping for 150 seconds for network to converge" )
+        time.sleep(150)
+        # get routes inside SDN-IP
+        main.log.info( "Getting Routes from ONOS CLI" )
+        getRoutesResult = main.ONOScli.routes( jsonFormat=True )
+
+        # parse routes from ONOS CLI
+        newAllRoutesActual = \
+            main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
+        newAllRoutesStrActual = str( newAllRoutesActual ).replace( 'u', "" )
+
+        # Expected routes with changed next hop
+        newAllRoutesExpected = []
+        for prefix in prefixesHost3:
+            newAllRoutesExpected.append( prefix + "/" + "192.168.20.1" )
+        for prefix in prefixesHost4:
+            newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
+        for prefix in prefixesHost5:
+            newAllRoutesExpected.append( prefix + "/" + "192.168.60.2" )
+        newAllRoutesStrExpected = str( sorted( newAllRoutesExpected ) )
+        main.step( "Check routes installed after convergence-1" )
+        main.log.info( "Routes expected:" )
+        main.log.info( newAllRoutesStrExpected )
+        main.log.info( "Routes got from ONOS CLI after convergence-1:" )
+        main.log.info( newAllRoutesStrActual )
         utilities.assertEquals(
-            expect=True,
-            actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
-            onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
-            correct!***",
-            onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
-            wrong!***" )
-
-        if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
+            expect=newAllRoutesStrExpected, actual=newAllRoutesStrActual,
+            onpass="***Routes in SDN-IP are correct after convergence!***",
+            onfail="***Routes in SDN-IP are wrong after convergence!***" )
+        if( eq( newAllRoutesStrExpected, newAllRoutesStrActual ) ):
             main.log.report(
-                "***MultiPointToSinglePoint Intents before deleting routes \
-                correct!***" )
+                "***Routes in SDN-IP after convergence are correct!***" )
         else:
             main.log.report(
-                "***MultiPointToSinglePoint Intents before deleting routes \
-                wrong!***" )
-
-        main.step( "Check BGP PointToPointIntent intents installed" )
-        # bgp intents expected
-        bgpIntentsExpected = \
-            main.QuaggaCliHost3.generateExpectedBgpIntents( SDNIPJSONFILEPATH )
-        # get BGP intents from ONOS CLI
-        bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
-            getIntentsResult )
-
-        bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
-        bgpIntentsStrActual = str( bgpIntentsActual )
-        main.log.info( "PointToPointIntent intents expected:" )
-        main.log.info( bgpIntentsStrExpected )
-        main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
-        main.log.info( bgpIntentsStrActual )
-
-        utilities.assertEquals(
-            expect=True,
-            actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
-            onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
-            onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
-        if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
-            main.log.report(
-                "***PointToPointIntent Intents in SDN-IP are correct!***" )
-        else:
-            main.log.report(
-                "***PointToPointIntent Intents in SDN-IP are wrong!***" )
+                "***Routes in SDN-IP after convergence are wrong!***" )
 
         #============================= Ping Test ========================
-        # wait until all MultiPointToSinglePoint
-        time.sleep( 20 )
-        pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
-        pingTestResultsFile = \
-        "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-before-delete-routes-" \
-             + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
-        pingTestResults = main.QuaggaCliHost.pingTest(
-            "1.168.30.100", pingTestScript, pingTestResultsFile )
-        main.log.info( pingTestResults )
-
-        # 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")
+       
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="Default connectivity check PASS",
+                                  onfail="Default connectivity check FAIL")
 
         #============================= Deleting Routes ==================
         main.step( "Check deleting routes installed" )
         main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
         main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
+        main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
 
-        # main.log.info( "main.ONOScli.get_routes_num() = " )
-        # main.log.info( main.ONOScli.getRoutesNum() )
-        # utilities.assertEquals( expect="Total SDN-IP routes = 1", actual=
-        # main.ONOScli.getRoutesNum(),
         getRoutesResult = main.ONOScli.routes( jsonFormat=True )
         allRoutesActual = \
             main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
+
         main.log.info( "allRoutes_actual = " )
         main.log.info( allRoutesActual )
 
@@ -1044,324 +741,23 @@
             onfail="***Routes number in SDN-IP is not 0, wrong!***" )
 
         if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
-            main.log.report(
-                "***Routes in SDN-IP after deleting correct!***" )
+            main.log.report( "***Routes in SDN-IP after deleting correct!***" )
         else:
-            main.log.report(
-                "***Routes in SDN-IP after deleting wrong!***" )
+            main.log.report( "***Routes in SDN-IP after deleting wrong!***" )
 
-        main.step( "Check intents after deleting routes" )
-        getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-        routeIntentsActual = \
-            main.QuaggaCliHost3.extractActualRouteIntents(
-                getIntentsResult )
-        main.log.info( "main.ONOScli.intents()= " )
-        main.log.info( routeIntentsActual )
-        utilities.assertEquals(
-            expect="[]", actual=str( routeIntentsActual ),
-            onpass="***MultiPointToSinglePoint Intents number in SDN-IP is \
-            0, correct!***",
-            onfail="***MultiPointToSinglePoint Intents number in SDN-IP is \
-            0, wrong!***" )
-
-        if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
-            main.log.report(
-                "***MultiPointToSinglePoint Intents after deleting routes \
-                correct!***" )
+        #============================= 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.report(
-                "***MultiPointToSinglePoint Intents after deleting routes \
-                wrong!***" )
+            main.log.info("Test failed")
 
-        time.sleep( 20 )
-        pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
-        pingTestResultsFile = \
-        "~/SDNIP/SdnIpIntentDemo/log/CASE1-ping-results-after-delete-routes-" \
-             + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
-        pingTestResults = main.QuaggaCliHost.pingTest(
-            "1.168.30.100", pingTestScript, pingTestResultsFile )
-        main.log.info( pingTestResults )
-        time.sleep( 30 )
+        utilities.assert_equals(expect=main.TRUE,actual=pingTestResults,
+                                  onpass="disconnect check PASS",
+                                  onfail="disconnect check FAIL")
 
-        # main.step( "Test whether Mininet is started" )
-        # main.Mininet2.handle.sendline( "xterm host1" )
-        # main.Mininet2.handle.expect( "mininet>" )
-
-    def CASE2( self, main ):
-        """
-        Test the SDN-IP functionality
-        allRoutesExpected: all expected routes for all BGP peers
-        routeIntentsExpected: all expected MultiPointToSinglePointIntent \
-        intents
-        bgpIntentsExpected: expected PointToPointIntent intents
-        allRoutesActual: all routes from ONOS LCI
-        routeIntentsActual: actual MultiPointToSinglePointIntent intents \
-        from ONOS CLI
-        bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
-        """
-        import time
-        import json
-        from operator import eq
-        from time import localtime, strftime
-
-        main.case(
-            "The test case is to help to setup the TestON environment and \
-            test new drivers" )
-        SDNIPJSONFILEPATH = "../tests/SdnIpTest/sdnip.json"
-        # all expected routes for all BGP peers
-        allRoutesExpected = []
-        main.step( "Start to generate routes for all BGP peers" )
-
-        main.log.info( "Generate prefixes for host3" )
-        prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
-        main.log.info( prefixesHost3 )
-        # generate route with next hop
-        for prefix in prefixesHost3:
-            allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
-        routeIntentsExpectedHost3 = \
-            main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
-            prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
-            SDNIPJSONFILEPATH )
-
-        main.log.info( "Generate prefixes for host4" )
-        prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
-        main.log.info( prefixesHost4 )
-        # generate route with next hop
-        for prefix in prefixesHost4:
-            allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
-        routeIntentsExpectedHost4 = \
-            main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
-            prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
-            SDNIPJSONFILEPATH )
-
-        routeIntentsExpected = routeIntentsExpectedHost3 + \
-            routeIntentsExpectedHost4
-
-        main.log.report( "Removing raft logs" )
-        main.ONOSbench.onosRemoveRaftLogs()
-        main.log.report( "Uninstalling ONOS" )
-        main.ONOSbench.onosUninstall( ONOS1Ip )
-
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
-        main.step( "Set cell for ONOS-cli environment" )
-        main.ONOScli.setCell( cellName )
-        verifyResult = main.ONOSbench.verifyCell()
-        # main.log.report( "Removing raft logs" )
-        # main.ONOSbench.onosRemoveRaftLogs()
-        # main.log.report( "Uninstalling ONOS" )
-        # main.ONOSbench.onosUninstall( ONOS1Ip )
-        main.step( "Creating ONOS package" )
-        # packageResult = main.ONOSbench.onosPackage()
-
-        main.step( "Installing ONOS package" )
-        # onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
-        # node=ONOS1Ip )
-
-        main.step( "Checking if ONOS is up yet" )
-        # time.sleep( 60 )
-        onos1Isup = main.ONOSbench.isup( ONOS1Ip )
-        if not onos1Isup:
-            main.log.report( "ONOS1 didn't start!" )
-
-        main.step( "Start ONOS-cli" )
-        main.ONOScli.startOnosCli( ONOS1Ip )
-
-        main.step( "Get devices in the network" )
-        listResult = main.ONOScli.devices( jsonFormat=False )
-        main.log.info( listResult )
-        time.sleep( 10 )
-        main.log.info( "Installing sdn-ip feature" )
-        main.ONOScli.featureInstall( "onos-app-sdnip" )
-        time.sleep( 10 )
-
-        main.step( "Check BGP PointToPointIntent intents installed" )
-        # bgp intents expected
-        bgpIntentsExpected = main.QuaggaCliHost3.generateExpectedBgpIntents(
-            SDNIPJSONFILEPATH )
-        # get BGP intents from ONOS CLI
-        getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-        bgpIntentsActual = main.QuaggaCliHost3.extractActualBgpIntents(
-            getIntentsResult )
-
-        bgpIntentsStrExpected = str( bgpIntentsExpected ).replace( 'u', "" )
-        bgpIntentsStrActual = str( bgpIntentsActual )
-        main.log.info( "PointToPointIntent intents expected:" )
-        main.log.info( bgpIntentsStrExpected )
-        main.log.info( "PointToPointIntent intents get from ONOS CLI:" )
-        main.log.info( bgpIntentsStrActual )
-
-        utilities.assertEquals(
-            expect=True,
-            actual=eq( bgpIntentsStrExpected, bgpIntentsStrActual ),
-            onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
-            onfail="***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
-        if ( eq( bgpIntentsStrExpected, bgpIntentsStrActual ) ):
-            main.log.report(
-                "***PointToPointIntent Intents in SDN-IP are correct!***" )
-        else:
-            main.log.report(
-                "***PointToPointIntent Intents in SDN-IP are wrong!***" )
-
-        allRoutesStrExpected = str( sorted( allRoutesExpected ) )
-        routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
-        pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
-        # roundNum = 0;
-        # while( True ):
-        for roundNum in range( 1, 6 ):
-            # round = round + 1;
-            main.log.report( "The Round " + str( roundNum ) +
-                             " test starts................................" )
-
-            main.step( "Login all BGP peers and add routes into peers" )
-            main.log.info( "Login Quagga CLI on host3" )
-            main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
-            main.log.info(
-                "Enter configuration model of Quagga CLI on host3" )
-            main.QuaggaCliHost3.enterConfig( 64514 )
-            main.log.info( "Add routes to Quagga on host3" )
-            main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
-
-            main.log.info( "Login Quagga CLI on host4" )
-            main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
-            main.log.info(
-                "Enter configuration model of Quagga CLI on host4" )
-            main.QuaggaCliHost4.enterConfig( 64516 )
-            main.log.info( "Add routes to Quagga on host4" )
-            main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
-            time.sleep( 60 )
-
-            # get all routes inside SDN-IP
-            getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-
-            # parse routes from ONOS CLI
-            allRoutesActual = \
-                main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-
-            # allRoutesStrExpected = str( sorted( allRoutesExpected ) )
-            allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
-            main.step( "Check routes installed" )
-            main.log.info( "Routes expected:" )
-            main.log.info( allRoutesStrExpected )
-            main.log.info( "Routes get from ONOS CLI:" )
-            main.log.info( allRoutesStrActual )
-            utilities.assertEquals(
-                expect=allRoutesStrExpected, actual=allRoutesStrActual,
-                onpass="***Routes in SDN-IP are correct!***",
-                onfail="***Routes in SDN-IP are wrong!***" )
-            if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
-                main.log.report(
-                    "***Routes in SDN-IP after adding correct!***" )
-            else:
-                main.log.report(
-                    "***Routes in SDN-IP after adding wrong!***" )
-
-            time.sleep( 20 )
-            getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-
-            main.step(
-                "Check MultiPointToSinglePointIntent intents installed" )
-            # routeIntentsExpected are generated when generating routes
-            # get route intents from ONOS CLI
-            routeIntentsActual = \
-                main.QuaggaCliHost3.extractActualRouteIntents(
-                    getIntentsResult )
-            # routeIntentsStrExpected = str( sorted( routeIntentsExpected ) )
-            routeIntentsStrActual = str(
-                routeIntentsActual ).replace( 'u', "" )
-            main.log.info( "MultiPointToSinglePoint intents expected:" )
-            main.log.info( routeIntentsStrExpected )
-            main.log.info(
-                "MultiPointToSinglePoint intents get from ONOS CLI:" )
-            main.log.info( routeIntentsStrActual )
-            utilities.assertEquals(
-                expect=True,
-                actual=eq( routeIntentsStrExpected, routeIntentsStrActual ),
-                onpass="***MultiPointToSinglePoint Intents in SDN-IP are \
-                correct!***",
-                onfail="***MultiPointToSinglePoint Intents in SDN-IP are \
-                wrong!***" )
-
-            if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
-                main.log.report(
-                    "***MultiPointToSinglePoint Intents after adding routes \
-                    correct!***" )
-            else:
-                main.log.report(
-                    "***MultiPointToSinglePoint Intents after adding routes \
-                    wrong!***" )
-
-            #============================= Ping Test ========================
-            # wait until all MultiPointToSinglePoint
-            time.sleep( 20 )
-            # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
-            pingTestResultsFile = \
-                "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
-                + str( roundNum ) + "-ping-results-before-delete-routes-" \
-                + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
-            pingTestResults = main.QuaggaCliHost.pingTest(
-                "1.168.30.100", pingTestScript, pingTestResultsFile )
-            main.log.info( pingTestResults )
-            # ping test
-
-            #============================= Deleting Routes ==================
-            main.step( "Check deleting routes installed" )
-            main.log.info( "Delete routes to Quagga on host3" )
-            main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
-            main.log.info( "Delete routes to Quagga on host4" )
-            main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
-
-            getRoutesResult = main.ONOScli.routes( jsonFormat=True )
-            allRoutesActual = \
-                main.QuaggaCliHost3.extractActualRoutes( getRoutesResult )
-            main.log.info( "allRoutes_actual = " )
-            main.log.info( allRoutesActual )
-
-            utilities.assertEquals(
-                expect="[]", actual=str( allRoutesActual ),
-                onpass="***Route number in SDN-IP is 0, correct!***",
-                onfail="***Routes number in SDN-IP is not 0, wrong!***" )
-
-            if( eq( allRoutesStrExpected, allRoutesStrActual ) ):
-                main.log.report(
-                    "***Routes in SDN-IP after deleting correct!***" )
-            else:
-                main.log.report(
-                    "***Routes in SDN-IP after deleting wrong!***" )
-
-            main.step( "Check intents after deleting routes" )
-            getIntentsResult = main.ONOScli.intents( jsonFormat=True )
-            routeIntentsActual = \
-                main.QuaggaCliHost3.extractActualRouteIntents(
-                    getIntentsResult )
-            main.log.info( "main.ONOScli.intents()= " )
-            main.log.info( routeIntentsActual )
-            utilities.assertEquals(
-                expect="[]", actual=str( routeIntentsActual ),
-                onpass=
-                "***MultiPointToSinglePoint Intents number in SDN-IP \
-                is 0, correct!***",
-                onfail="***MultiPointToSinglePoint Intents number in SDN-IP \
-                is 0, wrong!***" )
-
-            if( eq( routeIntentsStrExpected, routeIntentsStrActual ) ):
-                main.log.report(
-                    "***MultiPointToSinglePoint Intents after deleting \
-                    routes correct!***" )
-            else:
-                main.log.report(
-                    "***MultiPointToSinglePoint Intents after deleting \
-                    routes wrong!***" )
-
-            time.sleep( 20 )
-            # pingTestScript = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
-            pingTestResultsFile = \
-                "~/SDNIP/SdnIpIntentDemo/log/CASE2-Round" \
-                + str( roundNum ) + "-ping-results-after-delete-routes-" \
-                + strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
-            pingTestResults = main.QuaggaCliHost.pingTest(
-                "1.168.30.100", pingTestScript, pingTestResultsFile )
-            main.log.info( pingTestResults )
-            time.sleep( 30 )
+        main.ONOScli.disconnect()
+        main.ONOSbench.onosStop(ONOS1Ip);
+        main.Mininet.disconnect()
 
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/PeeringRouterConvergenceMininet.py b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/PeeringRouterConvergenceMininet.py
new file mode 100755
index 0000000..13c66ac
--- /dev/null
+++ b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/PeeringRouterConvergenceMininet.py
@@ -0,0 +1,346 @@
+#!/usr/bin/python
+
+"""
+Start up the SDN-IP demo topology
+"""
+
+"""
+AS1 = 64513, (SDN AS)
+AS2 = 64514, reachable by 192.168.10.1, 192.168.20.1
+AS3 = 64516, reachable by 192.168.30.1
+AS4 = 64517, reachable by 192.168.40.1
+AS6 = 64520, reachable by 192.168.60.2, (route server 192.168.60.1)
+"""
+
+from mininet.net import Mininet
+from mininet.node import Controller, RemoteController
+from mininet.log import setLogLevel, info
+from mininet.cli import CLI
+from mininet.topo import Topo
+from mininet.util import quietRun
+from mininet.moduledeps import pathCheck
+
+import os.path
+import time
+import sys
+from subprocess import Popen, STDOUT, PIPE
+
+QUAGGA_DIR = '/usr/lib/quagga'
+#QUAGGA_DIR = '/usr/local/sbin'
+QUAGGA_RUN_DIR = '/usr/local/var/run/quagga'
+
+QUAGGA_CONFIG_FILE_DIR = '/home/tutorial1/ONLabTest/TestON/tests/PeeringRouterTest/mininet'
+
+class SDNIpModifiedTopo( Topo ):
+    "SDN Ip Modified Topology"
+    
+    def __init__( self, *args, **kwargs ):
+        global numHost101 
+        global numHost200
+        numHost101 = 101
+        numHost200 = 200
+        Topo.__init__( self, *args, **kwargs )
+        sw1 = self.addSwitch('sw1', dpid='0000000000000001')
+        sw2 = self.addSwitch('sw2', dpid='0000000000000002')
+        #sw3 = self.addSwitch('sw3', dpid='00000000000000a3')
+        #sw4 = self.addSwitch('sw4', dpid='00000000000000a4')
+        #sw5 = self.addSwitch('sw5', dpid='00000000000000a5')
+        #sw6 = self.addSwitch('sw6', dpid='00000000000000a6')
+        #add a switch for 3 quagga hosts
+        swTestOn = self.addSwitch('swTestOn', dpid='0000000000000102')
+        #Note this switch isn't part of the SDN topology
+        #We'll use the ovs-controller to turn this into a learning switch
+        as6sw = self.addSwitch('as6sw', dpid='00000000000000a7')
+
+        host1 = self.addHost( 'host1' )
+        root1 = self.addHost( 'root1', inNamespace=False , ip='0')
+        rootTestOn = self.addHost( 'rootTestOn', inNamespace=False, ip='0' )
+
+        #AS2 host
+        host3 = self.addHost( 'host3' )
+        as2host = self.addHost( 'as2host' )
+        #AS3 host
+        host4 = self.addHost( 'host4' )
+        as3host = self.addHost( 'as3host' )
+        #AS6 host
+        host5 = self.addHost( 'host5' )
+        as6host = self.addHost( 'as6host' )
+
+        self.addLink( host1, sw2 )
+        #Links to the multihomed AS
+        self.addLink( host3, sw1 )
+        self.addLink( host3, sw1 )
+        self.addLink( as2host, host3 )
+        #Single links to the remaining two ASes
+        self.addLink( host4, sw1 )
+        self.addLink( as3host, host4 )
+          
+        #AS3-AS4 link
+        #self.addLink( host4, host5)
+        #Add new AS6 to its bridge
+        self.addLink( host5, as6sw )
+        self.addLink( as6host, host5 )
+
+        #Backup link from router5 to router4
+        self.addLink( host4, host5)
+
+        #test the host behind the router(behind the router server)
+#        for i in range(1, 10):
+ #           host = self.addHost('as6host%d' % i)
+  #          self.addLink(host, as6router)
+
+        ## Internal Connection To Hosts ##
+        self.addLink( root1, host1 )
+
+ #       self.addLink( sw1, sw2 )
+ #       self.addLink( sw1, sw3 )
+ #       self.addLink( sw2, sw4 )
+ #       self.addLink( sw3, sw4 )
+ #       self.addLink( sw3, sw5 )
+ #       self.addLink( sw4, sw6 )
+ #       self.addLink( sw5, sw6 )
+        self.addLink( as6sw, sw1 )
+        
+        
+        self.addLink(swTestOn, rootTestOn)
+        #self.addLink(swTestOn, host1)
+        self.addLink(swTestOn, host3)
+        self.addLink(swTestOn, host4)
+        self.addLink(swTestOn, host5)
+        self.addLink(swTestOn, as2host)
+        
+        
+        #self.addLink(rootTestOn, host4)
+
+def startsshd( host ):
+    "Start sshd on host"
+    info( '*** Starting sshd\n' )
+    name, intf, ip = host.name, host.defaultIntf(), host.IP()
+    banner = '/tmp/%s.banner' % name
+    host.cmd( 'echo "Welcome to %s at %s" >  %s' % ( name, ip, banner ) )
+    host.cmd( '/usr/sbin/sshd -o "Banner %s"' % banner, '-o "UseDNS no"' )
+    info( '***', host.name, 'is running sshd on', intf, 'at', ip, '\n' )
+
+def startsshds ( hosts ):
+    for h in hosts:
+        startsshd( h )
+
+def stopsshd( ):
+    "Stop *all* sshd processes with a custom banner"
+    info( '*** Shutting down stale sshd/Banner processes ',
+          quietRun( "pkill -9 -f Banner" ), '\n' )
+
+def startquagga( host, num, config_file ):
+    info( '*** Starting Quagga on %s\n' % host )
+    zebra_cmd = 'sudo %s/zebra -d -f  %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
+    quagga_cmd = 'sudo %s/bgpd -d -f %s -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, config_file, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
+    
+    print zebra_cmd
+    print quagga_cmd
+
+    host.cmd( zebra_cmd )
+    host.cmd( quagga_cmd )
+    
+def startquaggahost5( host, num ):
+    info( '*** Starting Quagga on %s\n' % host )
+    zebra_cmd = 'sudo %s/zebra -d -f %s/zebra.conf -z %s/zserv%s.api -i %s/zebra%s.pid' % (QUAGGA_DIR, QUAGGA_CONFIG_FILE_DIR, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
+    quagga_cmd = 'sudo %s/bgpd -d -f ./as4quaggas/quagga%s.conf -z %s/zserv%s.api -i %s/bgpd%s.pid' % (QUAGGA_DIR, num, QUAGGA_RUN_DIR, num, QUAGGA_RUN_DIR, num)
+   
+    host.cmd( zebra_cmd )
+    host.cmd( quagga_cmd )    
+    
+
+def stopquagga( ):
+    quietRun( 'sudo pkill -9 -f bgpd' )
+    quietRun( 'sudo pkill -9 -f zebra' )
+
+def sdn1net():
+    topo = SDNIpModifiedTopo()
+    info( '*** Creating network\n' )
+    net = Mininet( topo=topo, controller=RemoteController )
+    net = Mininet( topo=topo, controller=RemoteController )
+
+    host1, host3, host4, host5 = net.get( 'host1', 'host3', 'host4', 'host5' )
+    
+        #host100.setIP('1.168.30.' + str(i), 24, str(host100) + "-eth2")  
+         
+        #host500.setMAC('00:00:00:00:04:%d' % (i-101), 'host%d-eth0' %(i))
+        #add IP prefixes
+        #for j in range(0,121):
+            #host100.cmd('sudo ip addr add %s.0.40.%s/24 dev host%s-eth0' %(i,j,i))
+
+    ## Adding 2nd, 3rd and 4th interface to host1 connected to sw1 (for another BGP peering)
+    #sw1 = net.get('sw1')
+    host1.setMAC('00:00:00:00:00:01', 'host1-eth0')
+    host1.cmd('ip addr add 192.168.20.101/24 dev host1-eth0')
+    host1.cmd('ip addr add 192.168.30.101/24 dev host1-eth0')
+    #host1.cmd('ip addr add 192.168.40.101/24 dev host1-eth0')
+    host1.cmd('ip addr add 192.168.60.101/24 dev host1-eth0')
+
+    # Net has to be start after adding the above link
+    net.start()
+
+    # Set up as6sw as a learning switch as quickly as possible so it 
+    # hopefully doesn't connect to the actual controller
+    # TODO figure out how to change controller before starting switch
+    as6sw = net.get('as6sw')
+    as6sw.cmd('ovs-vsctl set-controller as6sw none')
+    as6sw.cmd('ovs-vsctl set-fail-mode as6sw standalone')
+
+
+    sw1 = net.get('sw1')
+    sw1.cmd('ovs-vsctl set-controller sw1 tcp:127.0.0.1:6633')
+#    sw2.cmd('ovs-vsctl set-controller sw2 tcp:127.0.0.1:6633')
+#    sw3.cmd('ovs-vsctl set-controller sw3 tcp:127.0.0.1:6633')
+#    sw4.cmd('ovs-vsctl set-controller sw4 tcp:127.0.0.1:6633')
+#    sw5.cmd('ovs-vsctl set-controller sw5 tcp:127.0.0.1:6633')
+#    sw6.cmd('ovs-vsctl set-controller sw6 tcp:127.0.0.1:6633')
+
+    
+    swTestOn = net.get('swTestOn')
+    swTestOn.cmd('ovs-vsctl set-controller swTestOn none')
+    swTestOn.cmd('ovs-vsctl set-fail-mode swTestOn standalone')
+
+    host1.defaultIntf().setIP('192.168.10.101/24') 
+    # Run BGPd
+    #host1.cmd('%s -d -f %s' % (BGPD, BGPD_CONF))
+    #host1.cmd('/sbin/route add default gw 192.168.10.254 dev %s-eth0' % (host1.name))
+    
+    # Configure new host interfaces
+    #host2.defaultIntf().setIP('172.16.10.2/24')
+    #host2.defaultIntf().setMAC('00:00:00:00:01:02') 
+    #host2.cmd('/sbin/route add default gw 172.16.10.254 dev %s-eth0' % (host2.name))
+
+    # Set up AS2
+    host3.setIP('192.168.10.1', 24, 'host3-eth0')
+    #host3.cmd('sudo ip addr add 172.16.20.1/24 dev host3-eth0')
+    host3.setIP('192.168.20.1', 24, 'host3-eth1')
+    host3.setMAC('00:00:00:00:02:01', 'host3-eth0')
+    host3.setMAC('00:00:00:00:02:02', 'host3-eth1')
+    #host3.setIP('172.16.20.254', 24, 'host3-eth2')
+    host3.setIP('3.0.0.254', 8, 'host3-eth2')
+    host3.cmd('sysctl net.ipv4.conf.all.forwarding=1')
+    
+    host3.setIP('1.168.30.2', 24, 'host3-eth3')   
+    host3.cmd('sysctl net.ipv4.conf.all.arp_ignore=1')
+    host3.cmd('sysctl net.ipv4.conf.all.arp_announce=1')
+    as2host = net.get('as2host')
+    #as2host.defaultIntf().setIP('172.16.20.1/24')
+    for i in range(0, 20):
+        as2host.cmd('sudo ip addr add 3.0.%d.1/24 dev as2host-eth0' %i)
+    as2host.setIP('1.168.30.100', 24, 'as2host-eth1')
+    
+    as2host.cmd('ip route add default via 3.0.0.254')
+    
+    # Set up AS3
+    host4.setIP('192.168.30.1', 24, 'host4-eth0')
+    host4.setMAC('00:00:00:00:03:01', 'host4-eth0')
+    host4.setIP('4.0.0.254', 8, 'host4-eth1')
+    host4.setMAC('00:00:00:00:03:99', 'host4-eth1')
+    host4.cmd('sysctl net.ipv4.conf.all.forwarding=1')
+    as3host = net.get('as3host')
+    for i in range(0, 20):
+        as3host.cmd('sudo ip addr add 4.0.%d.1/24 dev as3host-eth0' %i)
+    as3host.cmd('ip route add default via 4.0.0.254')
+    
+    host4.setIP('10.0.0.4', 24, 'host4-eth2')
+    host4.setMAC('00:00:00:00:03:33', 'host4-eth2')
+    
+    #root space
+    host4.setIP('1.168.30.3', 24, 'host4-eth3')
+    host4.setMAC('00:00:00:00:03:03', 'host4-eth3')
+    
+    # Set up AS4
+    #as4host = net.get('as4host')
+    #as4host.defaultIntf().setIP('172.16.40.1/24')
+    #as4host.cmd('ip route add default via 172.16.40.254')
+    
+    # setup interface address for 100 quagga hosts
+    time.sleep(10)
+    #for i in range(numHost101, numHost200 + 1):
+        #host100 = net.get('host' + str(i))
+        #host100.cmd(str(i)+'.0.1.254', 24, 'host'+str(i)+'-eth1')
+        #as4host100 = net.get('as4host%s' %(i))
+        #as4host100.defaultIntf().setIP(str(i) + '.0.0.1/24')
+        #as4host100.cmd('ip route add default via ' + str(i) + '.0.0.254')
+        #for j in range(0, 100):
+            #as4host100.cmd('sudo ip addr add %d.0.%d.1/24 dev %s-eth0' %(i, j, as4host100))
+
+    # Set up AS6 - This has a router and a route server
+    #as6rs, host5 = net.get('as6rs', 'host5')
+    host5 = net.get('host5')
+    #as6rs.setIP('192.168.60.1', 24, 'as6rs-eth0')
+    #as6rs.setMAC('00:00:00:00:06:01', 'as6rs-eth0')
+    host5.setIP('192.168.60.2', 24, 'host5-eth0')
+    host5.setMAC('00:00:00:00:06:02', 'host5-eth0')
+    #as6router.setIP('172.16.60.254', 24, 'as6router-eth1')
+    host5.setIP('5.0.0.254', 8, 'host5-eth1')
+    host5.cmd('sysctl net.ipv4.conf.all.forwarding=1')
+    host5.setIP('10.0.0.5', 24, 'host5-eth2')
+    host5.setMAC('00:00:00:00:06:66', 'host5-eth2')
+    host5.setIP('1.168.30.5', 24, 'host5-eth3')
+    host5.setMAC('00:00:00:00:06:05', 'host5-eth3')
+
+    as6host = net.get('as6host')
+    #as6host.defaultIntf().setIP('5.0.0.1/24')
+    for i in range(0, 10):
+        as6host.cmd('sudo ip addr add 5.0.%d.1/24 dev as6host-eth0' %i)
+    as6host.cmd('ip route add default via 5.0.0.254')
+
+    # test the host in the as6
+    #for i in range(1, 10):
+    #    baseip = (i-1)*4
+    #    host = net.get('as6host%d' % i)
+    #    host.defaultIntf().setIP('172.16.70.%d/24' % (baseip+1))
+    #    host.cmd('ip route add default via 172.16.70.%d' % (baseip+2))
+     #   as6router.setIP('172.16.70.%d' % (baseip+2), 30, 'as6router-eth%d' % (i+1))
+
+    # Start Quagga on border routers
+    startquagga(host3, 1, QUAGGA_CONFIG_FILE_DIR + '/quagga1.conf')
+    startquagga(host4, 2, QUAGGA_CONFIG_FILE_DIR + '/quagga2.conf')
+    #for i in range(numHost101, numHost200 + 1):
+        #host100=net.get('host%d' % (i))
+        #startquaggahost5(host100, i)
+
+    #startquagga(as6rs, 4, 'quagga-as6-rs.conf')
+    startquagga(host5, 5, QUAGGA_CONFIG_FILE_DIR + '/quagga-as6.conf')
+
+    #root1, root2, rootTestOn  = net.get( 'root1', 'root2', 'rootTestOn' )
+    root1, rootTestOn  = net.get( 'root1', 'rootTestOn' )
+    host1.intf('host1-eth1').setIP('1.1.1.1/24')
+    root1.intf('root1-eth0').setIP('1.1.1.2/24')
+    #host2.intf('host2-eth1').setIP('1.1.2.1/24')
+    #root2.intf('root2-eth0').setIP('1.1.2.2/24')
+    
+    #rootTestOn.cmd('ip addr add 1.168.30.102/24 dev rootTestOn-eth0')
+    rootTestOn.cmd('ip addr add 1.168.30.99/24 dev rootTestOn-eth0')
+    
+    stopsshd()    
+
+    startquagga(host1, 100, QUAGGA_CONFIG_FILE_DIR + '/quagga-sdn-modified.conf')    
+    hosts = [ host1, host3, host4, host5, as2host ];
+    #sshdHosts = sshdHosts + hosts
+    startsshds( hosts )
+    #
+    onos1 = '127.0.0.1'
+    forwarding1 = '%s:2000:%s:2000' % ('1.1.1.2', onos1)
+    root1.cmd( 'ssh -nNT -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % (forwarding1, onos1) )
+
+    # Forward 2605 to root namespace for easier access to SDN domain BGPd
+    # If root can ssh to itself without a password this should work
+    root1.cmd('ssh -N -o "PasswordAuthentication no" -o "StrictHostKeyChecking no" -L 2605:1.1.1.1:2605 1.1.1.1 &')
+    #time.sleep(3000000000)
+    CLI( net )
+
+    # Close the ssh port forwarding
+    #quietRun('sudo pkill -f 1.1.1.1')
+
+    stopsshd()
+    stopquagga()
+    net.stop()
+
+if __name__ == '__main__':
+    setLogLevel( 'debug' )
+    if len(sys.argv) > 1:
+        QUAGGA_CONFIG_FILE_DIR = sys.argv[1]
+    sdn1net()
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-as6.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-as6.conf
new file mode 100644
index 0000000..434f983
--- /dev/null
+++ b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-as6.conf
@@ -0,0 +1,39 @@
+! -*- bgp -*-
+!
+! BGPd sample configuratin file
+!
+! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
+!
+hostname bgpd
+password hello
+!enable password please-set-at-here
+!
+!bgp mulitple-instance
+!
+router bgp 64521
+  bgp router-id 192.168.60.2
+  neighbor 192.168.60.101 remote-as 64513
+! neighbor 192.168.60.1 remote-as 64520
+! neighbor 192.168.60.3 remote-as 64520
+!  network 172.16.60.0/24
+!  network 172.16.70.4/30
+ ! network 172.16.70.8/30
+ ! network 172.16.70.12/30
+ ! network 172.16.70.16/30
+ ! network 172.16.70.20/30
+ ! network 172.16.70.24/30
+ ! network 172.16.70.28/30
+ ! network 172.16.70.32/30
+! neighbor 10.0.0.2 route-map set-nexthop out
+! neighbor 10.0.0.2 ebgp-multihop
+! neighbor 10.0.0.2 next-hop-self
+!
+! access-list all permit any
+!
+!route-map set-nexthop permit 10
+! match ip address all
+! set ip next-hop 10.0.0.1
+!
+!log file /usr/local/var/log/quagga/bgpd.log
+!
+log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-sdn-modified.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-sdn-modified.conf
new file mode 100644
index 0000000..d334c2a
--- /dev/null
+++ b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga-sdn-modified.conf
@@ -0,0 +1,49 @@
+! -*- bgp -*-
+!
+! BGPd sample configuratin file
+!
+! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
+!
+hostname bgpd
+password hello
+!enable password please-set-at-here
+!
+!bgp mulitple-instance
+!
+route-map AS65000 permit 1
+  set as-path prepend 65000
+!
+router bgp 64513
+  bgp router-id 192.168.10.101
+  timers bgp 1 3
+  !timers bgp 3 9 
+  neighbor 192.168.10.1 remote-as 64514
+  neighbor 192.168.10.1 ebgp-multihop
+  neighbor 192.168.10.1 timers connect 5
+  neighbor 192.168.20.1 remote-as 64514
+  neighbor 192.168.20.1 ebgp-multihop
+  neighbor 192.168.20.1 timers connect 5
+  neighbor 192.168.20.1 route-map AS65000 in
+  neighbor 192.168.30.1 remote-as 64516
+  neighbor 192.168.30.1 ebgp-multihop
+  neighbor 192.168.30.1 timers connect 5
+  neighbor 192.168.60.2 remote-as 64521
+  neighbor 192.168.60.2 ebgp-multihop
+  neighbor 192.168.60.2 timers connect 5
+  neighbor 1.1.1.2 remote-as 64513
+  neighbor 1.1.1.2 port 2000
+  neighbor 1.1.1.2 timers connect 5
+
+
+
+  network 172.16.10.0/24
+!
+! access-list all permit any
+!
+!route-map set-nexthop permit 10
+! match ip address all
+! set ip next-hop 10.0.0.1
+!
+!log file /usr/local/var/log/quagga/bgpd.log
+!
+log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga1.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga1.conf
new file mode 100644
index 0000000..264f85e
--- /dev/null
+++ b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga1.conf
@@ -0,0 +1,32 @@
+!
+! Zebra configuration saved from vty
+!   2014/11/25 11:22:24
+!
+hostname bgpd
+password hello
+log stdout
+!
+router bgp 64514
+ bgp router-id 192.168.10.1
+! network 3.0.0.0/24
+! network 3.0.1.0/24
+! network 3.0.2.0/24
+! network 3.0.3.0/24
+! network 3.0.4.0/24
+! network 3.0.5.0/24
+! network 3.0.6.0/24
+! network 3.0.7.0/24
+! network 3.0.8.0/24
+! network 3.0.9.0/24
+ neighbor 192.168.20.101 remote-as 64513
+ neighbor 192.168.20.101 route-map PREPEND2 in
+ neighbor 192.168.20.101 route-map PREPEND2 out
+!
+route-map PREPEND1 permit 1
+ set as-path prepend 64514
+!
+route-map PREPEND2 permit 2
+ set as-path prepend 64514 64514
+!
+line vty
+!
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga2.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga2.conf
new file mode 100644
index 0000000..14c7d67
--- /dev/null
+++ b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/quagga2.conf
@@ -0,0 +1,32 @@
+! -*- bgp -*-
+!
+! BGPd sample configuratin file
+!
+! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
+!
+hostname bgpd
+password hello
+!enable password please-set-at-here
+!
+!bgp mulitple-instance
+!
+router bgp 64516
+  bgp router-id 192.168.30.1
+!  timers bgp 1 3
+  neighbor 192.168.30.101 remote-as 64513
+  neighbor 10.0.0.5 remote-as 64521
+! neighbor 192.168.50.2   remote-as 65001
+! network 172.16.30.0/24
+! neighbor 10.0.0.2 route-map set-nexthop out
+! neighbor 10.0.0.2 ebgp-multihop
+! neighbor 10.0.0.2 next-hop-self
+!
+! access-list all permit any
+!
+!route-map set-nexthop permit 10
+! match ip address all
+! set ip next-hop 10.0.0.1
+!
+!log file /usr/local/var/log/quagga/bgpd.log
+!
+log stdout
diff --git a/TestON/tests/PeeringRouterTest/routeconvergence/mininet/zebra.conf b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/zebra.conf
new file mode 100644
index 0000000..0f8e3a2
--- /dev/null
+++ b/TestON/tests/PeeringRouterTest/routeconvergence/mininet/zebra.conf
@@ -0,0 +1,26 @@
+! -*- zebra -*-
+!
+! zebra sample configuration file
+!
+! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
+!
+hostname zebra 
+password hello
+enable password 0fw0rk
+log stdout
+!
+! Interfaces description.
+!
+!interface lo
+! description test of desc.
+!
+!interface sit0
+! multicast
+
+!
+! Static default route sample.
+!
+!ip route 0.0.0.0/0 203.181.89.241
+!
+
+!log file /usr/local/var/log/quagga/zebra.log