📄 ospf_routing_table.c
字号:
OSPF_ROUTING_TABLE_NODE *sptr_routing_table_node) { OSPF_NEXT_HOP_BLOCK *sptr_old_next_hop_block; OSPF_NEXT_HOP_BLOCK *sptr_next_hop_block; enum BOOLEAN next_hop_is_new; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_next_hop_block_changed\r\n"); for (sptr_old_next_hop_block = sptr_old_routing_table_node->sptr_routing_table_entry->sptr_next_hop; sptr_old_next_hop_block != NULL; sptr_old_next_hop_block = sptr_old_next_hop_block->sptr_forward_link) { next_hop_is_new = TRUE; for (sptr_next_hop_block = sptr_routing_table_node->sptr_routing_table_entry->sptr_next_hop; sptr_next_hop_block != NULL; sptr_next_hop_block = sptr_next_hop_block->sptr_forward_link) { if ( (sptr_next_hop_block->next_hop_router == sptr_old_next_hop_block->next_hop_router) && (sptr_next_hop_block->outgoing_router_interface == sptr_old_next_hop_block->outgoing_router_interface)) { next_hop_is_new = FALSE; break; } } if (next_hop_is_new == TRUE) { return(TRUE); } } for (sptr_next_hop_block = sptr_routing_table_node->sptr_routing_table_entry->sptr_next_hop; sptr_next_hop_block != NULL; sptr_next_hop_block = sptr_next_hop_block->sptr_forward_link) { next_hop_is_new = TRUE; for (sptr_old_next_hop_block = sptr_old_routing_table_node->sptr_routing_table_entry->sptr_next_hop; sptr_old_next_hop_block != NULL; sptr_old_next_hop_block = sptr_old_next_hop_block->sptr_forward_link) { if ( (sptr_next_hop_block->next_hop_router == sptr_old_next_hop_block->next_hop_router) && (sptr_next_hop_block->outgoing_router_interface == sptr_old_next_hop_block->outgoing_router_interface)) { next_hop_is_new = FALSE; break; } } if (next_hop_is_new == TRUE) { return(TRUE); } } return(FALSE); }/**********************************************************************************************************************************/enum BOOLEAN ospf_get_new_next_hop_blocks_and_mark_ospf_rt_node_new (OSPF_ROUTING_TABLE_NODE *sptr_routing_table_node, OSPF_NEXT_HOP_BLOCK *sptr_new_next_hop_block, OSPF_NEXT_HOP_BLOCK **ptr_sptr_new_next_hops_copy) { OSPF_ROUTING_TABLE_ENTRY *sptr_routing_table_entry; OSPF_NEXT_HOP_BLOCK *sptr_old_next_hop_block; OSPF_NEXT_HOP_BLOCK *sptr_next_hop_block; OSPF_NEXT_HOP_BLOCK *sptr_begin_new_hops; enum BOOLEAN next_hop_is_new; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_get_new_next_hop_blocks_and_mark_ospf_rt_node_new\r\n"); if ((sptr_routing_table_node == NULL) || (sptr_routing_table_node->sptr_routing_table_entry == NULL)) { return(FALSE); } sptr_begin_new_hops = sptr_new_next_hop_block; sptr_routing_table_entry = sptr_routing_table_node->sptr_routing_table_entry; *ptr_sptr_new_next_hops_copy = NULL; for (; sptr_new_next_hop_block != NULL; sptr_new_next_hop_block = sptr_new_next_hop_block->sptr_forward_link) { next_hop_is_new = TRUE; for (sptr_old_next_hop_block = sptr_routing_table_entry->sptr_next_hop; sptr_old_next_hop_block != NULL; sptr_old_next_hop_block = sptr_old_next_hop_block->sptr_forward_link) { if ( (sptr_new_next_hop_block->next_hop_router == sptr_old_next_hop_block->next_hop_router) && (sptr_new_next_hop_block->outgoing_router_interface == sptr_old_next_hop_block->outgoing_router_interface)) { next_hop_is_new = FALSE; break; } } if (next_hop_is_new == TRUE) { sptr_next_hop_block = (OSPF_NEXT_HOP_BLOCK *) table_malloc (1, sizeof (OSPF_NEXT_HOP_BLOCK)); if (sptr_next_hop_block == NULL) { ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) NULL, "OSPF_NEXT_HOP_BLOCK"); return(FALSE); } memset (sptr_next_hop_block, 0x00, sizeof (OSPF_NEXT_HOP_BLOCK)); sptr_next_hop_block->next_hop_router = sptr_new_next_hop_block->next_hop_router; sptr_next_hop_block->outgoing_router_interface = sptr_new_next_hop_block->outgoing_router_interface; sptr_next_hop_block->route_status = OSPF_ROUTE_IS_NEW; if (*ptr_sptr_new_next_hops_copy == NULL) { *ptr_sptr_new_next_hops_copy = sptr_next_hop_block; } else { ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) sptr_next_hop_block, (OSPF_GENERIC_NODE *) *ptr_sptr_new_next_hops_copy); } } } if (*ptr_sptr_new_next_hops_copy != NULL) { sptr_old_next_hop_block = sptr_routing_table_entry->sptr_next_hop; sptr_routing_table_entry->sptr_next_hop = NULL; sptr_routing_table_entry->sptr_next_hop = sptr_old_next_hop_block; return(TRUE); } else { return(FALSE); } }/**********************************************************************************************************************************/#if defined (__OSPF_DEBUG__)static void ospf_print_areas_and_lsas (void) { OSPF_AREA_ENTRY *sptr_area = NULL; OSPF_AREA_ENTRY *sptr_next_area = NULL; ULONG link; ULONG index; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_print_areas_and_lsas\r\n"); OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: -------------------------------- Printing all LSAs (ALL VALUES IN HEXADECIMAL)------------ \r\n"); OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Router with Router ID %lx\r\n", ospf.router_id); for (sptr_area = ospf.sptr_area_list; sptr_area != NULL; sptr_area = sptr_next_area) { sptr_next_area = sptr_area->sptr_forward_link; OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Router with Area ID %lx\r\n", sptr_area->area_id); for (link = 0x00000000L ; link <= OSPF_LS_SUMMARY_NETWORK; ++link) { for (index = 0x00000000L; index < OSPF_HASH_TABLE_SIZE; ++index) { /* SPR#76812 */ ospf_print_lsas (sptr_area->ls_database_hash_table[link][index]); } } } OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Done printing areas and LSAs\r\n"); }/**********************************************************************************************************************************/static void ospf_print_lsas (OSPF_LS_DATABASE_HEAD ls_db_head) { OSPF_LS_DATABASE_ENTRY *sptr_database_entry; OSPF_LS_DATABASE_ENTRY *sptr_next_database_entry = NULL; /* SPR#76812 -- Begin */ for (sptr_database_entry = ls_db_head.sptr_linear_database_entry; sptr_database_entry != NULL; sptr_database_entry = sptr_next_database_entry) { sptr_next_database_entry = sptr_database_entry->sptr_forward_link; OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "\n\n"); OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "\nLink State ID: %lx ",sptr_database_entry->advertisement.sptr_router->ls_header.id); OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "\nAd Router Id %lx ",sptr_database_entry->advertisement.sptr_router->ls_header.advertising_router); if (sptr_database_entry->ls_database_type == OSPF_LS_ROUTER) { OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Router Link\r\n"); OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Link Type:%lx, Link TYPE (From LSAs HEADER):%x, Link Id:%lx, link data:%lx, Link Age:%x, net_to_host (age):%x, Link Seq#:%lx, Link Csum:%x #links:%x\r\n", sptr_database_entry->ls_database_type, sptr_database_entry->advertisement.sptr_router->ls_header.type, sptr_database_entry->advertisement.sptr_router->link.link_id, sptr_database_entry->advertisement.sptr_router->link.link_data, sptr_database_entry->advertisement.sptr_router->ls_header.age, net_to_host_short (sptr_database_entry->advertisement.sptr_router->ls_header.age), sptr_database_entry->advertisement.sptr_router->ls_header.sequence_number, sptr_database_entry->advertisement.sptr_router->ls_header.checksum, sptr_database_entry->advertisement.sptr_router->number_of_links); } else if (sptr_database_entry->ls_database_type == OSPF_LS_NETWORK) { OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Network Link\r\n"); OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Link Type:%lx, Link TYPE (From LSAs HEADER):%x, Link Id:%lx, mask:%lx, Link Age:%x, net_to_host (age):%x, Link Seq#:%lx, Link Csum:%x\r\n", sptr_database_entry->ls_database_type, sptr_database_entry->advertisement.sptr_router->ls_header.type, sptr_database_entry->advertisement.sptr_network->attached_router.link_id, sptr_database_entry->advertisement.sptr_network->network_mask, sptr_database_entry->advertisement.sptr_network->ls_header.age, net_to_host_short (sptr_database_entry->advertisement.sptr_router->ls_header.age), sptr_database_entry->advertisement.sptr_network->ls_header.sequence_number, sptr_database_entry->advertisement.sptr_network->ls_header.checksum); } else if (sptr_database_entry->ls_database_type == OSPF_LS_SUMMARY_NETWORK) { OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Network Summary Link\r\n"); OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Link Type:%lx, Link TYPE (From LSAs HEADER):%x, Link Id (from OSPF_LS_HEADER here):%lx, mask:%lx, Link Age:%x, net_to_host (age):%x, Link Seq#:%lx, Link Csum:%x\r\n", sptr_database_entry->ls_database_type, sptr_database_entry->advertisement.sptr_router->ls_header.type, sptr_database_entry->advertisement.sptr_summary->ls_header.id, sptr_database_entry->advertisement.sptr_summary->network_mask, sptr_database_entry->advertisement.sptr_summary->ls_header.age, net_to_host_short (sptr_database_entry->advertisement.sptr_router->ls_header.age), sptr_database_entry->advertisement.sptr_summary->ls_header.sequence_number, sptr_database_entry->advertisement.sptr_summary->ls_header.checksum); } } }#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -