Example #1
0
 def testPrefixAdvertisement(self):
     """Testing simple topology without filters (Check that all routers have at least one path)"""
     #SimBGP.runConfigFile("../../config/plain_bgp_base_topo.cfg")
     SimBGP.runConfigFile("plain_bgp_base_topo.cfg")
     for router in SimBGP._router_list:
         self.assertEqual(len(SimBGP._router_list[router].loc_rib["2.0/8"]),
                          1)
Example #2
0
 def testASPaths(self):
     """Testing that the AS path is correctly handled"""
     for mode in self.bgp_modes:
         SimBGP.init()
         #SimBGP.readConfigFile("../../config/topo-as-paths.cfg")
         SimBGP.readConfigFile("topo-as-paths.cfg")
         SimBGP.BGPModeAllRouters(mode)
         SimBGP.computeIGP()
         SimBGP.run()
         self.assertEqual(len(SimBGP._router_list["1.1"].loc_rib["1.0/8"]),
                          1)
         path = SimBGP._router_list["1.1"].loc_rib["1.0/8"][0]
         self.assertEqual(path.aspath, [])
         self.assertEqual(len(SimBGP._router_list["2.1"].loc_rib["1.0/8"]),
                          1)
         path = SimBGP._router_list["2.1"].loc_rib["1.0/8"][0]
         self.assertEqual(path.aspath, [1])
         self.assertEqual(len(SimBGP._router_list["3.1"].loc_rib["1.0/8"]),
                          1)
         path = SimBGP._router_list["3.1"].loc_rib["1.0/8"][0]
         self.assertEqual(path.aspath, [2, 1])
         self.assertEqual(len(SimBGP._router_list["4.1"].loc_rib["1.0/8"]),
                          1)
         path = SimBGP._router_list["4.1"].loc_rib["1.0/8"][0]
         self.assertEqual(path.aspath, [3, 2, 1])
Example #3
0
    def testFilters(self):
        """Testing that filters are applied in all modes.  Classical business relationships are used"""
        for mode in self.bgp_modes:
            SimBGP.init()
            #SimBGP.readConfigFile("../../config/topo-business-rel.cfg")
            SimBGP.readConfigFile("topo-business-rel.cfg")
            SimBGP.BGPModeAllRouters(mode)
            SimBGP.computeIGP()
            SimBGP.run()
            #Check that everyone receives the customer prefix
            for router in SimBGP._router_list:
                try:
                    self.assertEqual(
                        len(SimBGP._router_list[router].loc_rib["4.0/8"]), 1)
                except:
                    print(("Pbm with router %s\n" % router))
                    raise
            #Check that peer and provider prefixes are only  known by AS 1 and AS4
            self.assertEqual(
                len(SimBGP._router_list["1.0.0.1"].loc_rib["2.0/8"]), 1)
            self.assertEqual(
                len(SimBGP._router_list["1.0.0.2"].loc_rib["2.0/8"]), 1)
            self.assertEqual(
                len(SimBGP._router_list["1.0.0.3"].loc_rib["2.0/8"]), 1)
            self.assertEqual(
                len(SimBGP._router_list["4.0.0.1"].loc_rib["2.0/8"]), 1)
            self.assertEqual(
                len(SimBGP._router_list["1.0.0.1"].loc_rib["3.0/8"]), 1)
            self.assertEqual(
                len(SimBGP._router_list["1.0.0.2"].loc_rib["3.0/8"]), 1)
            self.assertEqual(
                len(SimBGP._router_list["1.0.0.3"].loc_rib["3.0/8"]), 1)
            self.assertEqual(
                len(SimBGP._router_list["4.0.0.1"].loc_rib["3.0/8"]), 1)

            #Check that customer prefixes are prefered over others
            for router in SimBGP._router_list:
                if SimBGP._router_list[router].asn == "1":
                    aspath = SimBGP._router_list[router].loc_rib["1.0/8"][
                        0].aspath
                    self.assertEqual(aspath[0], "4")

            #Check that peer prefixes are prefered over provider's
            for router in SimBGP._router_list:
                #Local AS and customer : prefix is known
                if SimBGP._router_list[
                        router].asn == "1" or SimBGP._router_list[
                            router].asn == "4":
                    self.assertEqual(
                        len(SimBGP._router_list[router].loc_rib["5.0/8"]), 1)
                    aspath = SimBGP._router_list[router].loc_rib["1.0/8"][
                        0].aspath
                    self.assertEqual(aspath[-1], "3")
                #Peer and Provider : No pref in locrib (peer because pref is local)
                if SimBGP._router_list[
                        router].asn == "2" or SimBGP._router_list[
                            router].asn == "3":
                    self.assertEqual(
                        len(SimBGP._router_list[router].loc_rib["5.0/8"]), 0)
Example #4
0
 def testPrefixWithdrawal(self):
     """Testing that prefix are unreachable by all routers after prefix withdrawal"""
     #Same as above.  Withdraw prefix after some time, and check that no one has a path
     #SimBGP.runConfigFile("../../config/plain_bgp_base_topo.cfg")
     SimBGP.runConfigFile("plain_bgp_base_topo.cfg")
     SimBGP._event_Scheduler.add(
         SimBGP.CEvent(SimBGP._systime, ["2.1", "2.0/8"],
                       SimBGP.EVENT_WITHDRAW_PREFIX))
     SimBGP.run()
     for router in SimBGP._router_list:
         self.assertEqual(len(SimBGP._router_list[router].loc_rib["2.0/8"]),
                          0)
Example #5
0
 def testPrefixAdvertisement(self):
     """Testing simple topology without filters (Check that all routers have at least one path)"""
     for mode in self.bgp_modes:
         SimBGP.init()
         #SimBGP.readConfigFile("../../config/plain_bgp_base_topo.cfg")
         SimBGP.readConfigFile("plain_bgp_base_topo.cfg")
         SimBGP.BGPModeAllRouters(mode)
         SimBGP.computeIGP()
         SimBGP.run()
         for router in SimBGP._router_list:
             self.assertNotEqual(
                 len(SimBGP._router_list[router].loc_rib["2.0/8"]), 0)
Example #6
0
 def testDomainIsolation(self):
     #Create two connected domains
     myNet = SimBGP.CIGPNetwork()
     myNet.addRouter("1", 1)
     myNet.addRouter("2", 1)
     myNet.addRouter("3", 2)
     myNet.addRouter("4", 2)
     myNet.addIGPLink("1", "2", 1500)
     myNet.addIGPLink("3", "4")
     myNet.addIGPLink("2", "3")
     myNet.compute()
     self.assertFalse(myNet.isReachableFrom("1", "4"))
     self.assertFalse(myNet.isReachableFrom("4", "1"))
     #1 can join 3 because 3 is ASBR
     self.assertTrue(myNet.isReachableFrom("1", "3"))
     #3 cannot join 1 because 1 is not ASBR of AS1
     self.assertFalse(myNet.isReachableFrom("3", "1"))
     #2 ASBR => must be reachable
     self.assertTrue(myNet.isReachableFrom("2", "3"))
     #4 is not ASBR => not joignable from outside
     self.assertFalse(myNet.isReachableFrom("2", "4"))
     #2 is an ASBR
     self.assertTrue(myNet.isReachableFrom("4", "2"))
     #Reg link
     self.assertTrue(myNet.isReachableFrom("3", "2"))
     self.assertTrue(myNet.isReachableFrom("2", "3"))
     #Inside domains
     self.assertTrue(myNet.isReachableFrom("1", "2"))
     self.assertTrue(myNet.isReachableFrom("3", "4"))
     self.assertTrue(myNet.isReachableFrom("2", "1"))
     self.assertTrue(myNet.isReachableFrom("4", "3"))
Example #7
0
 def testIGPConfig(self):
     #SimBGP.runConfigFile("../../config/igp_config.cfg")
     SimBGP.runConfigFile("igp_config.cfg")
     self.assertEqual(SimBGP._igp_graph.getIGPLink("3", "1").cost, 500)
     self.assertEqual(SimBGP._igp_graph.getIGPLink("3", "2").cost, 500)
     self.assertEqual(SimBGP._igp_graph.getIGPLink("1", "2").cost, 1500)
     self.assertEqual(SimBGP._igp_graph.getShortestPathLength("1", "2"),
                      1000)
     self.assertEqual(SimBGP._igp_graph.getShortestPathLength("1", "3"),
                      500)
     self.assertEqual(SimBGP._igp_graph.getShortestPathLength("3", "1"),
                      500)
     self.assertEqual(SimBGP._igp_graph.getShortestPathLength("3", "2"),
                      500)
     self.assertEqual(
         SimBGP._igp_graph.getPathTransmissionDelay("1", "2", 100000000),
         2 * 1000000 * (5.0 / 3000.0 + 0.5))
Example #8
0
 def testNotBestExternal(self):
     """Check that best external is not activated in normal mode"""
     SimBGP.init()
     #SimBGP.readConfigFile("../../config/best_external.cfg")
     SimBGP.readConfigFile("best_external.cfg")
     SimBGP.BGPModeAllRouters("BGP_NORMAL")
     SimBGP.computeIGP()
     SimBGP.run()
     #        print SimBGP._router_list["1.1"].loc_rib["2.0/8"][0]
     #        print SimBGP._router_list["1.1"].loc_rib["2.0/8"][1]
     if SimBGP._router_list["1.3"].peers["1.1"].rib_in.has_key("2.0/8"):
         self.assertEqual(
             len(SimBGP._router_list["1.3"].peers["1.1"].rib_in["2.0/8"]),
             0)
Example #9
0
 def testeBGPoveriBGP(self):
     for mode in self.bgp_modes:
         SimBGP.init()
         #SimBGP.readConfigFile("../../config/plain_bgp_eBGP_over_iBGP.cfg")
         SimBGP.readConfigFile("plain_bgp_eBGP_over_iBGP.cfg")
         SimBGP.BGPModeAllRouters(mode)
         SimBGP.computeIGP()
         SimBGP.run()
         #Check that both routers prefers the path via AS2
         self.assertEqual(
             SimBGP._router_list["0.0.0.1"].loc_rib["2.0/8"][0].src_pid,
             "0.2.0.0")
         self.assertEqual(
             SimBGP._router_list["0.0.0.0"].loc_rib["2.0/8"][0].src_pid,
             "0.2.0.0")
Example #10
0
 def testImportFilter(self):
     """Testing path importation"""
     #Loop detection from AS Path
     self.myPath = SimBGP.CPath()
     self.myPath.aspath = [1, 2]
     self.assertFalse(
         self.myRouter1.importFilter("2.0.0.0", "1.0/8", self.myPath))
     self.myPath.aspath = [3, 2]
     self.assertTrue(
         self.myRouter1.importFilter("2.0.0.0", "1.0/8", self.myPath))
Example #11
0
 def testGetLink(self):
     myNet = SimBGP.CIGPNetwork()
     myNet.addRouter("1", 1)
     myNet.addRouter("2", 1)
     myNet.addRouter("3", 1)
     myNet.addIGPLink("1", "2", 1500)
     myNet.addIGPLink("2", "3")
     myNet.addIGPLink("1", "3")
     myNet.compute()
     self.assertEqual(myNet.getIGPLink("3", "1").cost, 500)
     self.assertEqual(myNet.getIGPLink("3", "2").cost, 500)
     self.assertEqual(myNet.getIGPLink("1", "2").cost, 1500)
Example #12
0
 def testDelayBetweenRouters(self):
     myNet = SimBGP.CIGPNetwork()
     myNet.addRouter("1", 1)
     myNet.addRouter("2", 1)
     myNet.addRouter("3", 1)
     myNet.addIGPLink("1", "2", 1500)
     myNet.addIGPLink("2", "3")
     myNet.addIGPLink("3", "1")
     myNet.compute()
     #Link delay must be twice the default delay with a cost of 1
     # See class IGP Link test
     self.assertEqual(myNet.getPathTransmissionDelay("1", "2", 100000000),
                      2 * 1000000 * (5.0 / 3000.0 + 1.0))
Example #13
0
 def testUnreachability(self):
     #Create unconnected network
     myNet = SimBGP.CIGPNetwork()
     myNet.addRouter("1", 1)
     myNet.addRouter("2", 1)
     myNet.addRouter("4", 1)
     myNet.addRouter("5", 1)
     myNet.addIGPLink("1", "2", 1500)
     myNet.addIGPLink("4", "5")
     myNet.compute()
     self.assertFalse(myNet.isReachableFrom("1", "5"))
     self.assertFalse(myNet.isReachableFrom("5", "1"))
     self.assertEquals(myNet.getShortestPathLength("1", "5"), None)
Example #14
0
 def testLinkDown(self):
     #SimBGP.runConfigFile("../../config/igp_config.cfg")
     SimBGP.runConfigFile("igp_config.cfg")
     SimBGP._event_Scheduler.add(
         SimBGP.CEvent(SimBGP.toSystemTime(100.0), ["3", "2"],
                       SimBGP.EVENT_LINK_DOWN))
     SimBGP.run()
     self.assertEqual(SimBGP._igp_graph.getShortestPathLength("3", "2"),
                      2000)
Example #15
0
 def testIGPShortestPath(self):
     myNet = SimBGP.CIGPNetwork()
     myNet.addRouter("1", 1)
     myNet.addRouter("2", 1)
     myNet.addRouter("3", 1)
     myNet.addIGPLink("1", "2", 1500)
     myNet.addIGPLink("2", "3", 500)
     myNet.addIGPLink("3", "1", 500)
     myNet.compute()
     self.assertEqual(myNet.getShortestPathLength("1", "2"),
                      myNet.getShortestPathLength("2", "1"))
     self.assertEqual(myNet.getShortestPathLength("1", "2"),
                      myNet.getShortestPathLength("2", "1"))
     self.assertEqual(myNet.getShortestPathLength("1", "2"), 1000)
     self.assertEqual(myNet.getShortestPathLength("1", "3"), 500)
     self.assertEqual(myNet.getShortestPathLength("3", "1"), 500)
     self.assertEqual(myNet.getShortestPathLength("3", "2"), 500)
Example #16
0
 def testPreferLocalPath(self):
     """Check that the locally originated path is preferred"""
     for mode in self.bgp_modes:
         SimBGP.init()
         #SimBGP.readConfigFile("../../config/plain_local.cfg")
         SimBGP.readConfigFile("plain_local.cfg")
         SimBGP.BGPModeAllRouters(mode)
         SimBGP.computeIGP()
         SimBGP.run()
         #Check that each router prefers path via itself
         self.assertEqual(
             SimBGP._router_list["0.0.0.0"].loc_rib["1.0/8"][0].src_pid,
             None)
         self.assertEqual(
             SimBGP._router_list["0.0.0.1"].loc_rib["1.0/8"][0].src_pid,
             None)
         #Check that path is received from other peer
         self.assertEqual(
             len(SimBGP._router_list["0.0.0.0"].peers["0.0.0.1"].
                 rib_in["1.0/8"]), 1)
         self.assertEqual(
             len(SimBGP._router_list["0.0.0.1"].peers["0.0.0.0"].
                 rib_in["1.0/8"]), 1)
Example #17
0
 def testHotPotato(self):
     for mode in self.bgp_modes:
         SimBGP.init()
         #SimBGP.readConfigFile("../../config/plain_hot_potato.cfg")
         SimBGP.readConfigFile("plain_hot_potato.cfg")
         SimBGP.BGPModeAllRouters(mode)
         SimBGP.computeIGP()
         SimBGP.run()
         #Check that each router closest nexthop
         #print('SimBGP._router_list["0.0.0.2"].loc_rib["1.0/8"][0].src_pid is %s\n' %SimBGP._router_list["0.0.0.2"].loc_rib["1.0/8"][0].src_pid)
         self.assertEqual(
             SimBGP._router_list["0.0.0.2"].loc_rib["1.0/8"][0].src_pid,
             "0.0.0.0")
         self.assertEqual(
             SimBGP._router_list["0.0.0.1"].loc_rib["1.0/8"][0].src_pid,
             "0.0.0.0")
         #Check that each receiving router prefers eBGP path
         self.assertEqual(
             SimBGP._router_list["0.0.0.3"].loc_rib["1.0/8"][0].src_pid,
             "1.0.0.0")
         self.assertEqual(
             SimBGP._router_list["0.0.0.0"].loc_rib["1.0/8"][0].src_pid,
             "2.0.0.0")
 def setUp(self):
     #Configuring topology
     #SimBGP.runConfigFile("../../config/best_external.cfg")
     SimBGP.runConfigFile("best_external.cfg")
 def tearDown(self):
     SimBGP.init()
Example #20
0
 def setUp(self):
     SimBGP.init()
Example #21
0
    def testPrefixWithdrawal(self):
        """Testing that prefix are unreachable by all routers after prefix withdrawal"""
        #Same as above.  Withdraw prefix after some time, and check that no one has a path
        for mode in self.bgp_modes:
            SimBGP.init()
            #SimBGP.readConfigFile("../../config/plain_bgp_base_topo.cfg")
            SimBGP.readConfigFile("plain_bgp_base_topo.cfg")
            SimBGP.BGPModeAllRouters(mode)
            SimBGP.computeIGP()
            SimBGP.run()

            for router in SimBGP._router_list:
                self.assertNotEqual(
                    len(SimBGP._router_list[router].loc_rib["2.0/8"]), 0)
            SimBGP._event_Scheduler.add(
                SimBGP.CEvent(SimBGP._systime, ["2.1", "2.0/8"],
                              SimBGP.EVENT_WITHDRAW_PREFIX))
            SimBGP.run()
            for router in SimBGP._router_list:
                try:
                    self.assertEqual(
                        len(SimBGP._router_list[router].loc_rib["2.0/8"]), 0)
                except:
                    print("Assertion failed with router", router, "in mode",
                          mode)
                    raise
Example #22
0
 def testLinkDown(self):
     """Checking behaviour when an IGP link is down"""
     for mode in self.bgp_modes:
         SimBGP.init()
         #SimBGP.readConfigFile("../../config/plain_hot_potato.cfg")
         SimBGP.readConfigFile("plain_hot_potato.cfg")
         SimBGP.BGPModeAllRouters(mode)
         SimBGP.computeIGP()
         SimBGP.run()
         self.assertEqual(
             SimBGP.getRouterLink("0.0.0.1", "0.0.0.2").reach,
             SimBGP.PEER_REACH)
         #Check that each router prefers path via itself
         self.assertEqual(
             SimBGP._router_list["0.0.0.2"].loc_rib["1.0/8"][0].src_pid,
             "0.0.0.0")
         self.assertEqual(
             SimBGP._router_list["0.0.0.1"].loc_rib["1.0/8"][0].src_pid,
             "0.0.0.0")
         #Check that each receiving router prefers eBGP path
         self.assertEqual(
             SimBGP._router_list["0.0.0.3"].loc_rib["1.0/8"][0].src_pid,
             "1.0.0.0")
         self.assertEqual(
             SimBGP._router_list["0.0.0.0"].loc_rib["1.0/8"][0].src_pid,
             "2.0.0.0")
         #Link down
         SimBGP._event_Scheduler.add(
             SimBGP.CEvent(SimBGP.toSystemTime(10.0),
                           ["0.0.0.1", "0.0.0.2"], SimBGP.EVENT_LINK_DOWN))
         SimBGP.run()
         self.assertEqual(
             SimBGP.getRouterLink("0.0.0.1", "0.0.0.2").reach,
             SimBGP.PEER_UNREACH)
         self.assertEqual(
             SimBGP._router_list["0.0.0.2"].loc_rib["1.0/8"][0].src_pid,
             "0.0.0.3")
         self.assertEqual(
             SimBGP._router_list["0.0.0.1"].loc_rib["1.0/8"][0].src_pid,
             "0.0.0.0")
         #Check that each receiving router prefers eBGP path
         self.assertEqual(
             SimBGP._router_list["0.0.0.3"].loc_rib["1.0/8"][0].src_pid,
             "1.0.0.0")
         self.assertEqual(
             SimBGP._router_list["0.0.0.0"].loc_rib["1.0/8"][0].src_pid,
             "2.0.0.0")
         #Check Link Up
         SimBGP._event_Scheduler.add(
             SimBGP.CEvent(SimBGP.toSystemTime(11.0),
                           ["0.0.0.1", "0.0.0.2"], SimBGP.EVENT_LINK_UP))
         SimBGP.run()
         self.assertTrue(
             SimBGP._igp_graph.isReachableFrom("0.0.0.1", "0.0.0.2"))
         self.assertEqual(
             SimBGP.getRouterLink("0.0.0.1", "0.0.0.2").reach,
             SimBGP.PEER_REACH)
         self.assertEqual(
             SimBGP._router_list["0.0.0.2"].loc_rib["1.0/8"][0].src_pid,
             "0.0.0.0")
         self.assertEqual(
             SimBGP._router_list["0.0.0.1"].loc_rib["1.0/8"][0].src_pid,
             "0.0.0.0")
Example #23
0
 def tearDown(self):
     #Clean all SimBGP data
     SimBGP.init()
Example #24
0
 def setUp(self):
     SimBGP.init()
     #Configuring simple triangle topology
     self.myRouter1 = SimBGP.CRouter(1, "1.0.0.0")
     self.myRouter2 = SimBGP.CRouter(2, "2.0.0.0")
     self.myRouter3 = SimBGP.CRouter(2, "2.0.0.1")
     SimBGP._router_list["1.0.0.0"] = self.myRouter1
     SimBGP._router_list["2.0.0.0"] = self.myRouter2
     SimBGP._router_list["2.0.0.1"] = self.myRouter3
     self.myLink1 = self.myRouter1.getPeerLink("2.0.0.0")
     self.myLink2 = self.myRouter2.getPeerLink("1.0.0.0")
     self.myLink3 = self.myRouter3.getPeerLink("2.0.0.0")
     self.myLink4 = self.myRouter3.getPeerLink("1.0.0.0")
     self.myRouter1.peers["2.0.0.0"] = SimBGP.CPeer("2.0.0.0", self.myLink1)
     self.myRouter1.peers["2.0.0.1"] = SimBGP.CPeer("2.0.0.1", self.myLink4)
     self.myRouter2.peers["1.0.0.0"] = SimBGP.CPeer("1.0.0.0", self.myLink2)
     self.myRouter2.peers["2.0.0.1"] = SimBGP.CPeer("2.0.0.1", self.myLink3)
     self.myRouter3.peers["1.0.0.0"] = SimBGP.CPeer("1.0.0.0", self.myLink4)
     self.myRouter3.peers["2.0.0.0"] = SimBGP.CPeer("2.0.0.0", self.myLink3)
Example #25
0
 def tearDown(self):
     SimBGP.init()
     SimBGP.BEST_EXTERNAL = False
     SimBGP.MAX_PATH_NUMBER = 1