コード例 #1
0
ファイル: test_experiment.py プロジェクト: nitk-nest/NeST
    def test_experiment_ipv6(self):
        # Test IPv6 with Duplicate Address Detection (DAD) disabled
        n0 = Node("n0")
        n1 = Node("n1")
        r = Node("r")
        r.enable_ip_forwarding()

        (n0_r, r_n0) = connect(n0, r)
        (r_n1, n1_r) = connect(r, n1)

        n0_r.set_address("10::1:1/122")
        r_n0.set_address("10::1:2/122")
        r_n1.set_address("10::2:2/122")
        n1_r.set_address("10::2:1/122")

        n0.add_route("DEFAULT", n0_r)
        n1.add_route("DEFAULT", n1_r)

        n0_r.set_attributes("100mbit", "5ms")
        r_n0.set_attributes("100mbit", "5ms")

        r_n1.set_attributes("10mbit", "40ms", "pie")
        n1_r.set_attributes("10mbit", "40ms")

        exp = Experiment("test-experiment-ipv6")
        flow = Flow(n0, n1, n1_r.address, 0, 5, 2)
        exp.add_tcp_flow(flow)

        exp.run()
コード例 #2
0
ファイル: test_experiment.py プロジェクト: nitk-nest/NeST
    def test_experiment_udp(self):
        n0 = Node("n0")
        n1 = Node("n1")
        r = Node("r")
        r.enable_ip_forwarding()

        (n0_r, r_n0) = connect(n0, r)
        (r_n1, n1_r) = connect(r, n1)

        n0_r.set_address("10.1.1.1/24")
        r_n0.set_address("10.1.1.2/24")
        r_n1.set_address("10.1.2.2/24")
        n1_r.set_address("10.1.2.1/24")

        n0.add_route("DEFAULT", n0_r)
        n1.add_route("DEFAULT", n1_r)

        n0_r.set_attributes("100mbit", "5ms")
        r_n0.set_attributes("100mbit", "5ms")

        r_n1.set_attributes("10mbit", "40ms", "pie")
        n1_r.set_attributes("10mbit", "40ms")

        exp = Experiment("test-experiment-udp")
        flow = Flow(n0, n1, n1_r.address, 0, 5, 2)
        exp.add_udp_flow(flow)

        exp.run()
コード例 #3
0
class TestStaticMPLS(unittest.TestCase):
    # pylint: disable=invalid-name
    def setUp(self):
        self.n0 = Node("n0")
        self.n1 = Node("n1")
        self.r0 = Node("r0")
        self.r1 = Node("r1")
        self.r0.enable_ip_forwarding()
        self.r1.enable_ip_forwarding()

    def tearDown(self):
        delete_namespaces()

        ### Create interfaces and connect nodes and routers ###

    def test_routing(self):
        (eth_n0_r0, eth_r0_n0) = connect(self.n0, self.r0, "eth-n0_r0",
                                         "eth-r0_n0")
        (eth_r0_r1, eth_r1_r0) = connect(self.r0, self.r1, "eth-r0r1-0",
                                         "eth-r1r0-0")
        (eth_r1_n1, eth_n1_r1) = connect(self.r1, self.n1, "eth-r1n1-0",
                                         "eth-n1r1-0")

        ### Assign addresses to interfaces ###
        eth_n0_r0.set_address("10.0.1.1/24")
        eth_r0_n0.set_address("10.0.1.2/24")

        eth_r0_r1.set_address("10.0.2.2/24")
        eth_r1_r0.set_address("10.0.2.3/24")

        eth_r1_n1.set_address("10.0.3.3/24")
        eth_n1_r1.set_address("10.0.3.4/24")

        # Enable MPLS on all interfaces
        eth_n0_r0.enable_mpls()
        eth_r0_n0.enable_mpls()

        eth_r0_r1.enable_mpls()
        eth_r1_r0.enable_mpls()

        eth_r1_n1.enable_mpls()
        eth_n1_r1.enable_mpls()

        # Add routes(mpls family)
        self.n0.add_route_mpls_push("10.0.3.0/24", eth_r0_n0.get_address(),
                                    101)
        self.r0.add_route_mpls_switch(101, eth_r1_r0.get_address(), 102)
        self.r1.add_route_mpls_pop(102, eth_n1_r1.get_address())

        self.n1.add_route_mpls_push("10.0.1.0/24", eth_r1_n1.get_address(),
                                    201)
        self.r1.add_route_mpls_switch(201, eth_r0_r1.get_address(), 202)
        self.r0.add_route_mpls_pop(202, eth_n0_r0.get_address())

        status = self.n0.ping("10.0.3.4", verbose=True)
        self.assertTrue(status)

        status = self.n1.ping("10.0.1.1", verbose=True)
        self.assertTrue(status)
コード例 #4
0
class TestFrr(unittest.TestCase):

    # pylint: disable=invalid-name
    # pylint: disable=too-many-instance-attributes
    def setUp(self):
        self.n0 = Node("n0")
        self.n1 = Node("n1")
        self.r0 = Node("r0")
        self.r1 = Node("r1")
        self.r0.enable_ip_forwarding()
        self.r1.enable_ip_forwarding()

        ### Create interfaces and connect nodes and routers ###

        (eth_p1r1, eth_r1p1) = connect(self.n0, self.r0, "eth-n1r1-0",
                                       "eth-r1n1-0")
        (eth_r1r2, eth_r2r1) = connect(self.r0, self.r1, "eth-r1r2-0",
                                       "eth-r2r1-0")
        (eth_r2p2, eth_p2r2) = connect(self.r1, self.n1, "eth-r2n2-0",
                                       "eth-n2r2-0")

        ### Assign addresses to interfaces ###

        eth_p1r1.set_address("10::1:1/122")
        eth_r1p1.set_address("10::1:2/122")

        eth_r1r2.set_address("10::2:2/122")
        eth_r2r1.set_address("10::2:3/122")

        eth_r2p2.set_address("10::3:3/122")
        eth_p2r2.set_address("10::3:4/122")

        config.set_value("routing_suite", "frr")  # Use frr

    def tearDown(self):
        delete_namespaces()
        TopologyMap.delete_all_mapping()

    def test_rip_ipv6(self):

        RoutingHelper("rip").populate_routing_tables()

        status = self.n0.ping("10::3:4", verbose=False)
        self.assertTrue(status)

        status = self.n1.ping("10::1:1", verbose=False)
        self.assertTrue(status)

    def test_ospf_ipv6(self):

        RoutingHelper("ospf").populate_routing_tables()

        status = self.n0.ping("10::3:4", verbose=False)
        self.assertTrue(status)

        status = self.n1.ping("10::1:1", verbose=False)
        self.assertTrue(status)
コード例 #5
0
ファイル: test_routing_frr.py プロジェクト: nitk-nest/NeST
class TestFrr(unittest.TestCase):

    # pylint: disable=invalid-name
    def setUp(self):

        self.assertTrue(isfile("/usr/lib/frr/zebra"), "Frrouting is not installed")

        self.n0 = Node("n0")
        self.n1 = Node("n1")
        self.r0 = Node("r0")
        self.r1 = Node("r1")
        self.r0.enable_ip_forwarding()
        self.r1.enable_ip_forwarding()

        ### Create interfaces and connect nodes and routers ###

        (eth_p1r1, eth_r1p1) = connect(self.n0, self.r0, "eth-n1r1-0", "eth-r1n1-0")
        (eth_r1r2, eth_r2r1) = connect(self.r0, self.r1, "eth-r1r2-0", "eth-r2r1-0")
        (eth_r2p2, eth_p2r2) = connect(self.r1, self.n1, "eth-r2n2-0", "eth-n2r2-0")

        ### Assign addresses to interfaces ###

        eth_p1r1.set_address("10.0.1.1/24")
        eth_r1p1.set_address("10.0.1.2/24")

        eth_r1r2.set_address("10.0.2.2/24")
        eth_r2r1.set_address("10.0.2.3/24")

        eth_r2p2.set_address("10.0.3.3/24")
        eth_p2r2.set_address("10.0.3.4/24")

        config.set_value("routing_suite", "frr")  # Use frr

    def tearDown(self):
        delete_namespaces()
        TopologyMap.delete_all_mapping()

    def test_routing_helper(self):

        RoutingHelper("rip").populate_routing_tables()

        status = self.n0.ping("10.0.3.4", verbose=False)
        self.assertTrue(status)

        status = self.n1.ping("10.0.1.1", verbose=False)
        self.assertTrue(status)

    def test_ospf(self):
        RoutingHelper("ospf").populate_routing_tables()

        status = self.n0.ping("10.0.3.4", verbose=False)
        self.assertTrue(status)

        status = self.n1.ping("10.0.1.1", verbose=False)
        self.assertTrue(status)
コード例 #6
0
ファイル: test_address_helper.py プロジェクト: nitk-nest/NeST
    def test_prp_ipv6(self):
        # pylint: disable=invalid-name
        r = Node("r")
        r.enable_ip_forwarding()

        with self.net3:
            (n0_r, r_n0) = connect(self.n0, r)

        with self.net4:
            (r_n1, n1_r) = connect(r, self.n1, network=self.net4)

        AddressHelper.assign_addresses()

        self.n0.add_route("DEFAULT", n0_r)
        self.n1.add_route("DEFAULT", n1_r)

        status = self.n0.ping(n1_r.get_address(), verbose=False)

        self.assertTrue(status)
コード例 #7
0
ファイル: test_topology.py プロジェクト: nitk-nest/NeST
    def test_prp(self):
        # pylint: disable=invalid-name
        r = Node("r")
        r.enable_ip_forwarding()

        (n0_r, r_n0) = connect(self.n0, r)
        (r_n1, n1_r) = connect(r, self.n1)

        n0_r.set_address("10.1.1.1/24")
        r_n0.set_address("10.1.1.2/24")
        r_n1.set_address("10.1.2.2/24")
        n1_r.set_address("10.1.2.1/24")

        self.n0.add_route("DEFAULT", n0_r)
        self.n1.add_route("DEFAULT", n1_r)

        status = self.n0.ping("10.1.2.1")

        self.assertTrue(status)
コード例 #8
0
ファイル: test_address_helper.py プロジェクト: nitk-nest/NeST
    def test_prrp(self):
        # pylint: disable=invalid-name
        r1 = Node("r")
        r2 = Node("r")
        r1.enable_ip_forwarding()
        r2.enable_ip_forwarding()

        with self.net1:
            (n0_r1, r1_n0) = connect(self.n0, r1)

        (r1_r2, r2_r1) = connect(r1, r2, network=self.net2)
        (r2_n1, n1_r2) = connect(r2, self.n1)

        AddressHelper.assign_addresses()
        r2_n1.set_address("10.1.3.2/24")
        n1_r2.set_address("10.1.3.1/24")

        RoutingHelper(protocol="rip").populate_routing_tables()

        status = self.n0.ping(n1_r2.get_address(), verbose=False)

        self.assertTrue(status)
コード例 #9
0
ファイル: test_topology.py プロジェクト: nitk-nest/NeST
    def test_prp_ipv6(self):
        # pylint: disable=invalid-name
        r = Node("r")
        r.enable_ip_forwarding(ipv6=True)

        (n0_r, r_n0) = connect(self.n0, r)
        (r_n1, n1_r) = connect(r, self.n1)

        self.n0.disable_ip_dad()
        self.n1.disable_ip_dad()

        n0_r.set_address("2001:0001:0001:1443::0411/122")
        r_n0.set_address("2001:0001:0001:1443::0412/122")
        r_n1.set_address("2001:0001:0001:1444::0412/122")
        n1_r.set_address("2001:0001:0001:1444::0411/122")

        self.n0.add_route("DEFAULT", n0_r)
        self.n1.add_route("DEFAULT", n1_r)

        status = self.n0.ping(n1_r.address)

        self.assertTrue(status)
コード例 #10
0
class TestQuagga(unittest.TestCase):

    # pylint: disable=invalid-name
    def setUp(self):
        self.n0 = Node("n0")
        self.n1 = Node("n1")
        self.r0 = Node("r0")
        self.r1 = Node("r1")
        self.r0.enable_ip_forwarding()
        self.r1.enable_ip_forwarding()

        ### Create interfaces and connect nodes and routers ###

        (eth_p1r1, eth_r1p1) = connect(self.n0, self.r0, "eth-n1r1-0",
                                       "eth-r1n1-0")
        (eth_r1r2, eth_r2r1) = connect(self.r0, self.r1, "eth-r1r2-0",
                                       "eth-r2r1-0")
        (eth_r2p2, eth_p2r2) = connect(self.r1, self.n1, "eth-r2n2-0",
                                       "eth-n2r2-0")

        ### Assign addresses to interfaces ###

        eth_p1r1.set_address("10.0.1.1/24")
        eth_r1p1.set_address("10.0.1.2/24")

        eth_r1r2.set_address("10.0.2.2/24")
        eth_r2r1.set_address("10.0.2.3/24")

        eth_r2p2.set_address("10.0.3.3/24")
        eth_p2r2.set_address("10.0.3.4/24")

        config.set_value("routing_suite", "quagga")  # Use quagga

    def tearDown(self):
        delete_namespaces()
        TopologyMap.delete_all_mapping()

    def test_routing_helper(self):

        RoutingHelper("rip").populate_routing_tables()

        status = self.n0.ping("10.0.3.4", verbose=False)
        self.assertTrue(status)

        status = self.n1.ping("10.0.1.1", verbose=False)
        self.assertTrue(status)

    def test_ospf(self):
        RoutingHelper("ospf").populate_routing_tables()

        status = self.n0.ping("10.0.3.4", verbose=False)
        self.assertTrue(status)

        status = self.n1.ping("10.0.1.1", verbose=False)
        self.assertTrue(status)

    def test_isis(self):
        RoutingHelper("isis").populate_routing_tables()

        status = self.n0.ping("10.0.3.4", verbose=False)
        self.assertTrue(status)

        status = self.n1.ping("10.0.1.1", verbose=False)
        self.assertTrue(status)

    def test_logs(self):
        config.set_value("routing_logs", True)

        RoutingHelper("rip").populate_routing_tables()

        self.assertTrue(
            len(glob(f"{config.get_value('routing_suite')}-logs_*")) > 0)

        config.set_value("routing_logs", False)

    def test_custom_node_routers(self):
        RoutingHelper("rip", [self.n0, self.n1],
                      [self.r0, self.r1]).populate_routing_tables()

        status = self.n0.ping("10.0.3.4", verbose=False)
        self.assertTrue(status)

        status = self.n1.ping("10.0.1.1", verbose=False)
        self.assertTrue(status)

        with self.assertRaises(TypeError):
            RoutingHelper("rip", self.n1, self.r1).populate_routing_tables()

        with self.assertRaises(ValueError):
            RoutingHelper("rip", ["n1"], ["r1"]).populate_routing_tables()