Ejemplo n.º 1
0
def make_rx_tie_packet(header_info):
    (direction, origin, prefixtype, tie_nr, seq_nr, lifetime,
     _disposition) = header_info
    if prefixtype == NODE:
        rx_tie_packet = packet_common.make_node_tie_packet(name=MY_NAME,
                                                           level=MY_LEVEL,
                                                           direction=direction,
                                                           originator=origin,
                                                           tie_nr=tie_nr,
                                                           seq_nr=seq_nr,
                                                           lifetime=lifetime)
    elif prefixtype == PREFIX:
        rx_tie_packet = packet_common.make_prefix_tie_packet(
            direction, origin, tie_nr, seq_nr, lifetime)
    else:
        assert False
    return rx_tie_packet
Ejemplo n.º 2
0
def test_is_flood_allowed():
    packet_common.add_missing_methods_to_thrift()
    test_node = make_test_node()
    # Node 66 is same level as me
    node_66_tie_packet = packet_common.make_node_tie_packet(name="node66",
                                                            level=MY_LEVEL,
                                                            direction=SOUTH,
                                                            originator=66,
                                                            tie_nr=5,
                                                            seq_nr=7)
    test_node.store_tie_packet(node_66_tie_packet, 300)
    # Node 77 has higher level than me
    node_77_tie_packet = packet_common.make_node_tie_packet(name="node77",
                                                            level=MY_LEVEL + 1,
                                                            direction=SOUTH,
                                                            originator=77,
                                                            tie_nr=3,
                                                            seq_nr=2)
    test_node.store_tie_packet(node_77_tie_packet, 400)
    # Node 88 has lower level than me
    node_88_tie_packet = packet_common.make_node_tie_packet(name="node88",
                                                            level=MY_LEVEL - 1,
                                                            direction=SOUTH,
                                                            originator=88,
                                                            tie_nr=7,
                                                            seq_nr=3)
    test_node.store_tie_packet(node_88_tie_packet, 400)
    tx_tie_info_list = [
        # pylint:disable=bad-whitespace
        #                                                              Neighbor   Neighbor   I am    Allowed  Reason
        # Direction  Originator     Type,    Tie-Nr  Seq-Nr  Lifetime  Direction  System-ID  ToF
        (SOUTH, 66, NODE, 5, 7, 400, SOUTH, 22, False, True,
         "Node S-TIE to S: originator level is same as from-node"),
        (SOUTH, 77, NODE, 3, 2, 300, SOUTH, 18, False, False,
         "Node S-TIE to S: originator level is not same as from-node"),
        (SOUTH, 55, NODE, 8, 12, 500, NORTH, 17, False, False,
         "Node S-TIE to N: could not determine originator level"),
        (SOUTH, 77, NODE, 3, 3, 200, NORTH, 17, True, True,
         "Node S-TIE to N: originator level is higher than from-node"),
        (SOUTH, 88, NODE, 7, 3, 400, NORTH, 19, False, False,
         "Node S-TIE to N: originator level is not higher than from-node"),
        (SOUTH, 55, NODE, 8, 12, 550, EW, 19, True, False,
         "Node S-TIE to EW: from-node is top of fabric"),
        (SOUTH, 55, NODE, 8, 12, 550, EW, 19, False, True,
         "Node S-TIE to EW: from-node is not top of fabric"),
        (SOUTH, 55, NODE, 8, 12, 550, None, 19, False, False,
         "Node S-TIE to ?: never flood"),
        (SOUTH, MY_SYSTEM_ID, PREFIX, 4, 7, 200, SOUTH, 20, False, True,
         "Non-node S-TIE to S: self-originated"),
        (SOUTH, 55, PREFIX, 2, 4, 600, SOUTH, 20, True, False,
         "Non-node S-TIE to S: not self-originated"),
        (SOUTH, MY_SYSTEM_ID, PREFIX, 18, 903, 400, SOUTH, 33, True, True,
         "Non-node S-TIE to S: self-originated"),
        (SOUTH, 55, PREFIX, 2, 4, 600, NORTH, 55, False, True,
         "Non-node S-TIE to N: to-node is originator of TIE"),
        (SOUTH, 55, PREFIX, 2, 4, 600, NORTH, 33, False, False,
         "Non-node S-TIE to N: to-node is not originator of TIE"),
        (SOUTH, 55, PREFIX, 2, 4, 600, EW, 33, True, False,
         "Non-node S-TIE to EW: this top of fabric"),
        (SOUTH, MY_SYSTEM_ID, PREFIX, 18, 903, 400, EW, 33, False, True,
         "Non-node S-TIE to EW: self-originated and not top of fabric"),
        (SOUTH, 55, PREFIX, 2, 4, 600, EW, 33, False, False,
         "Non-node S-TIE to EW: not self-originated"),
        (SOUTH, 55, PREFIX, 2, 4, 600, None, 33, True, False,
         "None-node S-TIE to ?: never flood"),
        (NORTH, 55, NODE, 3, 3, 500, SOUTH, 20, False, False,
         "N-TIE to S: never flood"),
        (NORTH, 55, PREFIX, 2, 4, 500, SOUTH, 20, True, False,
         "N-TIE to S: never flood"),
        (NORTH, 55, NODE, 3, 3, 500, NORTH, 20, False, True,
         "N-TIE to N: always flood"),
        (NORTH, 55, PREFIX, 2, 4, 500, NORTH, 20, True, True,
         "N-TIE to N: always flood"),
        (NORTH, 55, NODE, 3, 3, 500, EW, 20, True, True,
         "N-TIE to EW: top of fabric"),
        (NORTH, 55, NODE, 3, 3, 500, EW, 20, False, False,
         "N-TIE to EW: not top of fabric"),
        (NORTH, 55, NODE, 3, 3, 500, None, 20, False, False,
         "N-TIE to ?: never flood")
    ]
    for tx_tie_info in tx_tie_info_list:
        (direction, originator, tietype, tie_nr, seq_nr, lifetime,
         neighbor_direction, neighbor_system_id, i_am_top_of_fabric,
         expected_allowed, expected_reason) = tx_tie_info
        tie_header = packet_common.make_tie_header_with_lifetime(
            direction, originator, tietype, tie_nr, seq_nr, lifetime)
        (allowed, reason) = test_node.is_flood_allowed(
            tie_header=tie_header.header,
            to_node_direction=neighbor_direction,
            to_node_system_id=neighbor_system_id,
            from_node_system_id=MY_SYSTEM_ID,
            from_node_level=MY_LEVEL,
            from_node_is_top_of_fabric=i_am_top_of_fabric)
        assert allowed == expected_allowed, expected_reason
        assert reason == expected_reason