⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ospf_routing_table.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 5 页
字号:
                                          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 + -