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()
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()
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)
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)
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)
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)
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)
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)
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)
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()