def test_remove_default_route():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    first_disagg_route = RibRoute(first_negative_disagg_prefix, S_SPF, [], first_negative_disagg_next_hops)
    rib.put_route(first_disagg_route)
    subnet_disagg_route = RibRoute(subnet_disagg_prefix, S_SPF, [], subnet_negative_disagg_next_hops)
    rib.put_route(subnet_disagg_route)
    rib.del_route(default_prefix, S_SPF)
    # Test for default
    assert not rib.destinations.has_key(default_prefix)
    assert default_prefix not in rib.fib.routes
    assert default_prefix not in rib.fib.kernel.routes
    # Test for 10.0.0.0/16
    assert rib.destinations.get(first_negative_disagg_prefix).parent_prefix_dest is None
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.negative_next_hops == {'S1'}
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.next_hops == set()
    assert rib.fib.routes[first_negative_disagg_prefix].next_hops == set()
    assert rib.fib.kernel.routes[first_negative_disagg_prefix] == "unreachable"
    # Test for 10.0.10.0/24
    assert rib.destinations.get(subnet_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(subnet_disagg_prefix).best_route.negative_next_hops == {'S2'}
    assert rib.destinations.get(subnet_disagg_prefix).best_route.next_hops == set()
    assert rib.fib.routes[subnet_disagg_prefix].next_hops == set()
    assert rib.fib.kernel.routes[subnet_disagg_prefix] == "unreachable"
def test_remove_default_next_hop():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    first_disagg_route = RibRoute(first_negative_disagg_prefix, S_SPF, [], first_negative_disagg_next_hops)
    rib.put_route(first_disagg_route)
    second_disagg_route = RibRoute(second_negative_disagg_prefix, S_SPF, [], second_negative_disagg_next_hops)
    rib.put_route(second_disagg_route)
    default_route_fail = RibRoute(default_prefix, S_SPF, ['S1', 'S3', 'S4'])
    rib.put_route(default_route_fail)
    # Test for default
    assert rib.destinations.get(default_prefix).best_route == default_route_fail
    assert rib.destinations.get(default_prefix).best_route.positive_next_hops == {'S1', 'S3', 'S4'}
    assert rib.destinations.get(default_prefix).best_route.negative_next_hops == set()
    assert rib.destinations.get(default_prefix).best_route.next_hops == {'S1', 'S3', 'S4'}
    assert rib.fib.routes[default_prefix].next_hops == default_route_fail.next_hops
    assert rib.fib.kernel.routes[default_prefix] == default_route_fail.next_hops
    # Test for 10.0.0.0/16
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.negative_next_hops == {'S1'}
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.next_hops == {'S3', 'S4'}
    assert rib.fib.kernel.routes[first_negative_disagg_prefix] == first_disagg_route.next_hops
    # Test for 10.1.0.0/16
    assert rib.destinations.get(second_negative_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(second_negative_disagg_prefix).best_route.negative_next_hops == {'S4'}
    assert rib.destinations.get(second_negative_disagg_prefix).best_route.next_hops == {'S1', 'S3'}
    assert rib.fib.kernel.routes[second_negative_disagg_prefix] == second_disagg_route.next_hops
Exemplo n.º 3
0
def test_prop_parent_pos_child_pos():

    # Add a parent aggregate rioute and a child more specific route, each with only positive
    # next-hops.

    fib = Fib()
    rib = Rib(fib)

    # Install two routes into the RIB:
    rib.put_route("1.2.0.0/16", ["nh1", "nh2"])     # Parent aggregate route, positive nexthops
    rib.put_route("1.2.3.0/24", ["nh3", "nh4"])     # Child more specific route, positive nexthops

    # The RIB must contain the following routes:
    assert str(rib) == ("1.2.0.0/16 -> nh1, nh2\n"
                        "1.2.3.0/24 -> nh3, nh4\n")

    # The FIB must contain the following routes:
    assert str(fib) == ("1.2.0.0/16 -> nh1, nh2\n"
                        "1.2.3.0/24 -> nh3, nh4\n")

    # Delete the parent route from the RIB.
    rib.del_route("1.2.0.0/16")
    assert str(rib) == "1.2.3.0/24 -> nh3, nh4\n"

    # The corresponding route should be deleted from the FIB.
    assert str(fib) == "1.2.3.0/24 -> nh3, nh4\n"

    # Delete the child route from the RIB.
    rib.del_route("1.2.3.0/24")

    # The RIB must be empty.
    assert str(rib) == ""

    # The FIB must be empty.
    assert str(fib) == ""
def test_recover_default_next_hop_with_subnet_disagg():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    first_disagg_route = RibRoute(first_negative_disagg_prefix, S_SPF, [], first_negative_disagg_next_hops)
    rib.put_route(first_disagg_route)
    subnet_disagg_route = RibRoute(subnet_disagg_prefix, S_SPF, [], subnet_negative_disagg_next_hops)
    rib.put_route(subnet_disagg_route)
    default_route_fail = RibRoute(default_prefix, S_SPF, ['S1', 'S2', 'S4'])
    rib.put_route(default_route_fail)
    default_route_recover = RibRoute(default_prefix, S_SPF, ['S1', 'S2', 'S3', 'S4'])
    rib.put_route(default_route_recover)
    # Test for default
    assert rib.destinations.get(default_prefix).best_route == default_route_recover
    assert rib.destinations.get(default_prefix).best_route.positive_next_hops == {'S1', 'S2', 'S3', 'S4'}
    assert rib.destinations.get(default_prefix).best_route.negative_next_hops == set()
    assert rib.destinations.get(default_prefix).best_route.next_hops == {'S1', 'S2', 'S3', 'S4'}
    assert rib.fib.routes[default_prefix].next_hops == default_route_recover.next_hops
    assert rib.fib.kernel.routes[default_prefix] == default_route_recover.next_hops
    # Test for 10.0.0.0/16
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.negative_next_hops == {'S1'}
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.next_hops == {'S2', 'S3', 'S4'}
    assert rib.fib.kernel.routes[first_negative_disagg_prefix] == first_disagg_route.next_hops
    # Test for 10.0.10.0/24
    assert rib.destinations.get(subnet_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(subnet_disagg_prefix).best_route.negative_next_hops == {'S2'}
    assert rib.destinations.get(subnet_disagg_prefix).best_route.next_hops == {'S3', 'S4'}
    assert rib.fib.kernel.routes[subnet_disagg_prefix] == subnet_disagg_route.next_hops
def test_add_subnet_disagg_to_first_negative_disagg():
    rib = Rib()
    rib.add_route(default_prefix, default_next_hops)
    rib.add_route(first_negative_disagg_prefix,
                  first_negative_disagg_next_hops,
                  disagg_type=False)
    rib.add_route(subnet_disagg_prefix,
                  subnet_disagg_next_hops,
                  disagg_type=False)
    assert rib.destinations.get(
        first_negative_disagg_prefix)._positive_next_hops == set()
    assert rib.destinations.get(first_negative_disagg_prefix)._negative_next_hops == \
           first_negative_disagg_next_hops
    assert rib.destinations.get(first_negative_disagg_prefix).get_next_hops == \
           default_next_hops - first_negative_disagg_next_hops
    assert rib.fib.routes[first_negative_disagg_prefix] == \
           default_next_hops - first_negative_disagg_next_hops
    # test for disaggregated subnet
    assert rib.destinations.get(
        subnet_disagg_prefix)._positive_next_hops == set()
    assert rib.destinations.get(
        subnet_disagg_prefix)._negative_next_hops == subnet_disagg_next_hops
    assert rib.destinations.get(subnet_disagg_prefix).get_next_hops == \
           default_next_hops - first_negative_disagg_next_hops - subnet_disagg_next_hops
    assert rib.fib.routes[subnet_disagg_prefix] == \
           default_next_hops - first_negative_disagg_next_hops - subnet_disagg_next_hops
def test_add_two_route_same_destination_with_subnet_and_remove_one():
    rib = Rib()
    default_route = RibRoute(default_prefix, N_SPF, default_next_hops)
    rib.put_route(default_route)
    best_default_route = RibRoute(default_prefix, S_SPF, ["S1", "S2", "S3"])
    rib.put_route(best_default_route)
    first_disagg_route = RibRoute(first_negative_disagg_prefix, S_SPF, [], first_negative_disagg_next_hops)
    rib.put_route(first_disagg_route)
    subnet_disagg_route = RibRoute(subnet_disagg_prefix, S_SPF, [], subnet_negative_disagg_next_hops)
    rib.put_route(subnet_disagg_route)
    rib.del_route(default_prefix, S_SPF)
    # Test for default
    assert rib.destinations.get(default_prefix).best_route == default_route
    assert rib.destinations.get(default_prefix).best_route.positive_next_hops == {'S1', 'S2', 'S3', 'S4'}
    assert rib.destinations.get(default_prefix).best_route.negative_next_hops == set()
    assert rib.destinations.get(default_prefix).best_route.next_hops == {'S1', 'S2', 'S3', 'S4'}
    assert rib.fib.routes[default_prefix].next_hops == default_route.next_hops
    assert rib.fib.kernel.routes[default_prefix] == default_route.next_hops
    # Test for 10.0.0.0/16
    assert rib.destinations.get(first_negative_disagg_prefix).best_route == first_disagg_route
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.negative_next_hops == {'S1'}
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.next_hops == {'S2', 'S3', 'S4'}
    assert rib.fib.routes[first_negative_disagg_prefix].next_hops == first_disagg_route.next_hops
    assert rib.fib.kernel.routes[first_negative_disagg_prefix] == first_disagg_route.next_hops
    # Test for 10.0.10.0/24
    assert rib.destinations.get(subnet_disagg_prefix).best_route == subnet_disagg_route
    assert rib.destinations.get(subnet_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(subnet_disagg_prefix).best_route.negative_next_hops == {'S2'}
    assert rib.destinations.get(subnet_disagg_prefix).best_route.next_hops == {'S3', 'S4'}
    assert rib.fib.routes[subnet_disagg_prefix].next_hops == subnet_disagg_route.next_hops
    assert rib.fib.kernel.routes[subnet_disagg_prefix] == subnet_disagg_route.next_hops
Exemplo n.º 7
0
def test_del_route():
    fib = Fib()
    rib = Rib(fib)
    rib.put_route("4.0.0.0/8", ["nh1", "nh2"])
    rib.put_route("5.5.0.0/16", ["nh3", "nh4"])
    rib.del_route("4.0.0.0/8")
    rib.del_route("3.0.0.0/8")
    assert str(rib) == ("5.5.0.0/16 -> nh3, nh4\n")
def test_add_default_route():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    assert rib.destinations.get(default_prefix).best_route == default_route
    assert rib.destinations.get(default_prefix).best_route.next_hops == {'S1', 'S2', 'S3', 'S4'}
    assert rib.fib.routes[default_prefix].next_hops == default_route.next_hops
    assert rib.fib.kernel.routes[default_prefix] == default_route.next_hops
def test_add_default_route():
    rib = Rib()
    rib.add_route(default_prefix, default_next_hops)
    assert rib.destinations.get(
        default_prefix)._positive_next_hops == default_next_hops
    assert rib.destinations.get(default_prefix)._negative_next_hops == set()
    assert rib.destinations.get(
        default_prefix).get_next_hops == default_next_hops
    assert rib.fib.routes[default_prefix] == default_next_hops
def test_neg_disagg_fib_unreachable():
    rib = Rib()
    rib.add_route(default_prefix, default_next_hops)
    rib.add_route(unreachable_prefix, unreachable_next_hops, disagg_type=False)
    assert rib.destinations.get(
        unreachable_prefix)._positive_next_hops == set()
    assert rib.destinations.get(
        unreachable_prefix)._negative_next_hops == unreachable_next_hops
    assert rib.destinations.get(unreachable_prefix).get_next_hops == set()
    assert rib.fib.routes[unreachable_prefix] == "unreachable"
Exemplo n.º 11
0
def test_put_route():
    fib = Fib()
    rib = Rib(fib)
    rib.put_route("4.0.0.0/8", ["nh1", "nh2"])
    rib.put_route("3.3.0.0/16", ["nh1", "nh3"], ["nh4", "nh2"])
    rib.put_route("4.1.1.0/24", [], ["nh1"])
    rib.put_route("4.0.0.0/8", ["nh1", "nh3"])
    assert str(rib) == ("3.3.0.0/16 -> nh1, ~nh2, nh3, ~nh4\n"
                        "4.0.0.0/8 -> nh1, nh3\n"
                        "4.1.1.0/24 -> ~nh1\n")
Exemplo n.º 12
0
def make_sta2000():
    sta = Rib(3)
    sta.add_web(1.6, 5)
    sta.add_stiffener(1.8, 17, 17)
    sta.add_compression_flange(4, 18, 17)
    sta.add_tension_flange(5, 23, 25)
    sta.add_rivet_stiffener(3.96875)
    sta.add_rivet_flange(3.96875, 6, 1)
    calc_all(sta)
    print("sta2000 mass", sta.get_total_mass())
    return sta
def test_pos_neg_disagg():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    leaf_route = RibRoute(leaf_prefix, S_SPF, leaf_prefix_positive_next_hops, leaf_prefix_negative_next_hops)
    rib.put_route(leaf_route)
    assert rib.destinations.get(leaf_prefix).best_route.positive_next_hops == {"M4"}
    assert rib.destinations.get(leaf_prefix).best_route.negative_next_hops == {"M3"}
    assert rib.destinations.get(leaf_prefix).best_route.next_hops == {"S4", "S3", "M4", "S2", "S1"}
    assert rib.fib.routes[leaf_prefix].next_hops == leaf_route.next_hops
    assert rib.fib.kernel.routes[leaf_prefix] == {"S4", "S3", "M4", "S2", "S1"}
Exemplo n.º 14
0
def make_sta1500():
    sta = Rib(2)
    sta.add_web(1.6, 5)
    sta.add_stiffener(1.8, 18, 18)
    sta.add_compression_flange(8, 34, 18)
    sta.add_tension_flange(8, 34, 25)
    sta.add_rivet_stiffener(3.96875)
    sta.add_rivet_flange(3.96875, 6, 2)
    calc_all(sta)
    print("sta1500 mass", sta.get_total_mass())
    return sta
def test_neg_disagg_fib_unreachable():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    unreachable_route = RibRoute(unreachable_prefix, S_SPF, [], unreachable_negative_next_hops)
    rib.put_route(unreachable_route)
    assert rib.destinations.get(unreachable_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(unreachable_prefix).best_route.negative_next_hops == {'S1', 'S2', 'S3', 'S4'}
    assert rib.destinations.get(unreachable_prefix).best_route.next_hops == set()
    assert rib.fib.routes[unreachable_prefix].next_hops == unreachable_route.next_hops
    assert rib.fib.kernel.routes[unreachable_prefix] == "unreachable"
Exemplo n.º 16
0
def make_sta3500():
    sta = Rib(6)
    sta.add_web(1.6, 3)
    sta.add_stiffener(1.8, 17, 10)
    sta.add_compression_flange(2.5, 18, 22)
    sta.add_tension_flange(2.5, 18, 22)
    sta.add_rivet_stiffener(3.96875)
    sta.add_rivet_flange(3.96875, 6, 1)
    calc_all(sta)
    print("sta3500 mass", sta.get_total_mass())
    return sta
Exemplo n.º 17
0
def make_sta1000():
    sta = Rib(1)
    sta.add_web(1.6, 6)
    sta.add_stiffener(1.8, 22, 21)
    sta.add_compression_flange(8, 27, 20)
    sta.add_tension_flange(9, 30, 30)
    sta.add_rivet_stiffener(4.7625)
    sta.add_rivet_flange(3.175, 6, 2)
    calc_all(sta)
    print("sta1000 mass", sta.get_total_mass())
    return sta
Exemplo n.º 18
0
def make_sta4500():
    sta = Rib(8)
    sta.add_web(1.6, 2)
    sta.add_stiffener(1.27, 13, 7)
    sta.add_compression_flange(1.0, 12, 14)
    sta.add_tension_flange(1.0, 12, 14)
    sta.add_rivet_stiffener(3.125)
    sta.add_rivet_flange(2.38125, 6, 1)
    calc_all(sta)
    print("sta4500 mass", sta.get_total_mass())
    return sta
Exemplo n.º 19
0
def test_get_repr():
    fib = Fib()
    rib = Rib(fib)
    rib.put_route("2.0.0.0/8", ["nh1", "nh2"])
    rib.put_route("2.2.2.0/24", ["nh1", "nh3"], ["nh4", "nh2"])
    rib.put_route("1.1.1.1/32", [], ["nh1"])
    rib.put_route("2.2.1.0/24", ["nh1", "nh3"])
    assert str(rib) == ("1.1.1.1/32 -> ~nh1\n"
                        "2.0.0.0/8 -> nh1, nh2\n"
                        "2.2.1.0/24 -> nh1, nh3\n"
                        "2.2.2.0/24 -> nh1, ~nh2, nh3, ~nh4\n")
def test_add_two_route_same_destination():
    rib = Rib()
    default_route = RibRoute(default_prefix, N_SPF, default_next_hops)
    rib.put_route(default_route)
    best_default_route = RibRoute(default_prefix, S_SPF, ['S1'])
    rib.put_route(best_default_route)
    assert rib.destinations.get(default_prefix).best_route == best_default_route
    assert rib.destinations.get(default_prefix).best_route.positive_next_hops == {'S1'}
    assert rib.destinations.get(default_prefix).best_route.negative_next_hops == set()
    assert rib.destinations.get(default_prefix).best_route.next_hops == {'S1'}
    assert rib.fib.routes[default_prefix].next_hops == best_default_route.next_hops
    assert rib.fib.kernel.routes[default_prefix] == best_default_route.next_hops
def test_add_negative_disaggregation():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    neg_route = RibRoute(first_negative_disagg_prefix, S_SPF, [], first_negative_disagg_next_hops)
    rib.put_route(neg_route)
    assert rib.destinations.get(first_negative_disagg_prefix).best_route == neg_route
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.negative_next_hops == {'S1'}
    assert rib.destinations.get(first_negative_disagg_prefix).best_route.next_hops == {'S2', 'S3', 'S4'}
    assert rib.fib.routes[first_negative_disagg_prefix].next_hops == neg_route.next_hops
    assert rib.fib.kernel.routes[first_negative_disagg_prefix] == neg_route.next_hops
def test_remove_superfluous_subnet():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    first_disagg_route = RibRoute(first_negative_disagg_prefix, S_SPF, [], first_negative_disagg_next_hops)
    rib.put_route(first_disagg_route)
    subnet_disagg_route = RibRoute(subnet_disagg_prefix, S_SPF, [], subnet_negative_disagg_next_hops)
    rib.put_route(subnet_disagg_route)
    rib.del_route(subnet_disagg_prefix, S_SPF)
    assert not rib.destinations.has_key(subnet_disagg_prefix)
    assert subnet_disagg_prefix not in rib.fib.routes
    assert subnet_disagg_prefix not in rib.fib.kernel.routes
def test_pos_neg_disagg_recursive():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    first_disagg_route = RibRoute(first_negative_disagg_prefix, S_SPF, [], first_negative_disagg_next_hops)
    rib.put_route(first_disagg_route)
    subnet_disagg_route = RibRoute(subnet_disagg_prefix, S_SPF, ["S1"], subnet_negative_disagg_next_hops)
    rib.put_route(subnet_disagg_route)
    assert rib.destinations.get(subnet_disagg_prefix).best_route.positive_next_hops == {"S1"}
    assert rib.destinations.get(subnet_disagg_prefix).best_route.negative_next_hops == {"S2"}
    assert rib.destinations.get(subnet_disagg_prefix).best_route.next_hops == {"S1", "S3", "S4"}
    assert rib.fib.routes[subnet_disagg_prefix].next_hops == subnet_disagg_route.next_hops
    assert rib.fib.kernel.routes[subnet_disagg_prefix] == {"S1", "S3", "S4"}
def test_remove_best_route():
    rib = Rib()
    default_route = RibRoute(default_prefix, N_SPF, default_next_hops)
    rib.put_route(default_route)
    best_default_route = RibRoute(default_prefix, S_SPF, ['S1'])
    rib.put_route(best_default_route)
    rib.del_route(default_prefix, S_SPF)
    assert rib.destinations.get(default_prefix).best_route == default_route
    assert rib.destinations.get(default_prefix).best_route.positive_next_hops == {'S1', 'S2', 'S3', 'S4'}
    assert rib.destinations.get(default_prefix).best_route.negative_next_hops == set()
    assert rib.destinations.get(default_prefix).best_route.next_hops == {'S1', 'S2', 'S3', 'S4'}
    assert rib.fib.routes[default_prefix].next_hops == default_route.next_hops
    assert rib.fib.kernel.routes[default_prefix] == default_route.next_hops
def test_neg_disagg_fib_unreachable_recover():
    rib = Rib()
    rib.add_route(default_prefix, default_next_hops)
    rib.add_route(unreachable_prefix, unreachable_next_hops, disagg_type=False)
    recovered_nodes = {"S3"}
    rib.delete_route(unreachable_prefix, recovered_nodes, disagg_type=False)
    assert rib.destinations.get(
        unreachable_prefix)._positive_next_hops == set()
    assert rib.destinations.get(unreachable_prefix)._negative_next_hops == \
           unreachable_next_hops - recovered_nodes
    assert rib.destinations.get(
        unreachable_prefix).get_next_hops == recovered_nodes
    assert rib.fib.routes[unreachable_prefix] == recovered_nodes
def test_add_subnet_disagg_to_first_negative_disagg():
    rib = Rib()
    default_route = RibRoute(default_prefix, S_SPF, default_next_hops)
    rib.put_route(default_route)
    first_disagg_route = RibRoute(first_negative_disagg_prefix, S_SPF, [], first_negative_disagg_next_hops)
    rib.put_route(first_disagg_route)
    subnet_disagg_route = RibRoute(subnet_disagg_prefix, S_SPF, [], subnet_negative_disagg_next_hops)
    rib.put_route(subnet_disagg_route)
    assert rib.destinations.get(subnet_disagg_prefix).best_route.positive_next_hops == set()
    assert rib.destinations.get(subnet_disagg_prefix).best_route.negative_next_hops == {'S2'}
    assert rib.destinations.get(subnet_disagg_prefix).best_route.next_hops == {'S3', 'S4'}
    assert rib.fib.routes[subnet_disagg_prefix].next_hops == subnet_disagg_route.next_hops
    assert rib.fib.kernel.routes[subnet_disagg_prefix] == subnet_disagg_route.next_hops
def test_pos_neg_disagg():
    rib = Rib()
    rib.add_route(default_prefix, default_next_hops)
    rib.add_route(leaf_prefix, leaf_prefix_positive_next_hops)
    rib.add_route(leaf_prefix,
                  leaf_prefix_negative_next_hops,
                  disagg_type=False)
    assert rib.destinations.get(
        leaf_prefix)._positive_next_hops == leaf_prefix_positive_next_hops
    assert rib.destinations.get(
        leaf_prefix)._negative_next_hops == leaf_prefix_negative_next_hops
    assert rib.destinations.get(
        leaf_prefix).get_next_hops == leaf_prefix_positive_next_hops
    assert rib.fib.routes[leaf_prefix] == leaf_prefix_positive_next_hops
def test_add_negative_disaggregation():
    rib = Rib()
    rib.add_route(default_prefix, default_next_hops)
    rib.add_route(first_negative_disagg_prefix,
                  first_negative_disagg_next_hops,
                  disagg_type=False)
    assert rib.destinations.get(
        first_negative_disagg_prefix)._positive_next_hops == set()
    assert rib.destinations.get(first_negative_disagg_prefix)._negative_next_hops == \
           first_negative_disagg_next_hops
    assert rib.destinations.get(first_negative_disagg_prefix).get_next_hops == \
           default_next_hops - first_negative_disagg_next_hops
    assert rib.fib.routes[first_negative_disagg_prefix] == \
           default_next_hops - first_negative_disagg_next_hops
Exemplo n.º 29
0
def test_prop_delete_nexthop_two_levels():

    # Test slides 59 and 60 in Pascal's "negative disaggregation" presentation.
    # Delete a nexthop from a parent route, and check that the computed complementary nexthops in
    # the child route and the grandchild route.

    fib = Fib()
    rib = Rib(fib)

    # Install the following three routes into the RIB:
    rib.put_route("0.0.0.0/0", ["nh1", "nh2", "nh3", "nh4"])    # Parent default route
    rib.put_route("10.0.0.0/16", [], ["nh1"])                   # Child, negative nexthop
    rib.put_route("10.0.10.0/24", [], ["nh2"])                  # Grandchild, negative nexthop

    # The RIB must contain the following routes:
    assert str(rib) == ("0.0.0.0/0 -> nh1, nh2, nh3, nh4\n"
                        "10.0.0.0/16 -> ~nh1\n"
                        "10.0.10.0/24 -> ~nh2\n")

    # The FIB must contain the following routes:
    assert str(fib) == ("0.0.0.0/0 -> nh1, nh2, nh3, nh4\n"
                        "10.0.0.0/16 -> nh2, nh3, nh4\n"
                        "10.0.10.0/24 -> nh3, nh4\n")

    # Delete nexthop nh3 from the parent route 0.0.0.0/0 (by replacing the route with a new one
    # that has the reduced set of nexthops).
    rib.put_route("0.0.0.0/0", ["nh1", "nh2", "nh4"])

    # The RIB must contain the following routes:
    assert str(rib) == ("0.0.0.0/0 -> nh1, nh2, nh4\n"      # nh3 is gone
                        "10.0.0.0/16 -> ~nh1\n"
                        "10.0.10.0/24 -> ~nh2\n")

    # The FIB must contain the following routes:
    assert str(fib) == ("0.0.0.0/0 -> nh1, nh2, nh4\n"      # nh3 is gone
                        "10.0.0.0/16 -> nh2, nh4\n"         # computed nh3 is gone
                        "10.0.10.0/24 -> nh4\n")            # computed nh3 is gone

    # Delete all routes from the RIB.
    rib.del_route("0.0.0.0/0")
    rib.del_route("10.0.0.0/16")
    rib.del_route("10.0.10.0/24")

    # The RIB must be empty.
    assert str(rib) == ""

    # The FIB must be empty.
    assert str(fib) == ""
Exemplo n.º 30
0
def make_sta625():
    sta = Rib(0)
    sta.add_web(2.03, 3)
    sta.add_stiffener(2.03, 16, 22)
    sta.add_compression_flange(7, 30, 25)
    sta.add_tension_flange(10, 30, 30)
    """
    sta.add_compression_flange(7, 60, 25)
    sta.add_tension_flange(8, 60, 30)
    """
    sta.add_rivet_stiffener(3.175)
    sta.add_rivet_flange(3.175, 6, 2)
    calc_all(sta)
    print("sta625 mass", sta.get_total_mass())
    print("he ", sta.he)
    return sta