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

📄 ospf_shortest_path_calculation.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 4 页
字号:
		{		return (PASS);		}}/*************************************************************************************//* section 16.1, stage 2, item (1) (p 154) */static enum TEST ospf_examine_distance_of_stub_network (OSPF_ROUTER_LINK_PIECE *sptr_link,OSPF_SHORTEST_PATH_NODE *sptr_vertex_V,	ULONG *ulptr_cost_D,OSPF_ROUTING_TABLE_NODE **ptr_to_sptr_routing_table_node){	USHORT tos0_metric;	ULONG link_id;	OSPF_ROUTING_TABLE_ENTRY* sptr_routing_table_entry;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_examine_distance_of_stub_network\r\n");	tos0_metric = sptr_link->tos0_metric;	tos0_metric = net_to_host_short (tos0_metric);	*ulptr_cost_D = sptr_vertex_V->cost + tos0_metric;	link_id = sptr_link->link_id;	link_id = net_to_host_long (link_id);	OSPF_PRINTF_ROUTING_TABLE (OSPF_DEBUG_PRINTF, "-------->>>>>>>>>>>> (Fn ospf_examine_distance_of_stub_network ) Examining stub link: link_id:%lx \n", link_id);    /* Fix for TSR 297651 (SPR# 83274) */    *ptr_to_sptr_routing_table_node = ospf_find_router_or_network_routing_table_node (link_id, OSPF_LS_NETWORK, 		OSPF_ROUTE_PATH_TYPE_WILDCARD, NULL);	if (*ptr_to_sptr_routing_table_node != NULL)		{		sptr_routing_table_entry = (*ptr_to_sptr_routing_table_node)->sptr_routing_table_entry;		}	else		{		sptr_routing_table_entry = NULL;		}	if (sptr_routing_table_entry != NULL)		{		if (*ulptr_cost_D > sptr_routing_table_entry->path_cost)			{			return (FAIL);			}		}	return (PASS);}/**********************************************************************************************************************************/static OSPF_SHORTEST_PATH_NODE *ospf_create_stub_vertex (ULONG vertex,OSPF_LS_DATABASE_ENTRY *sptr_database_entry,ULONG cost_D,	OSPF_SHORTEST_PATH_NODE *sptr_vertex_V, OSPF_AREA_ENTRY *sptr_area){	OSPF_SHORTEST_PATH_NODE *sptr_vertex_stub;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_create_stub_vertex\r\n");	sptr_vertex_stub = (OSPF_SHORTEST_PATH_NODE *) table_malloc (1, sizeof (OSPF_SHORTEST_PATH_NODE));	if (sptr_vertex_stub == NULL)		{		ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) NULL, "OSPF_SHORTEST_PATH_NODE");		return (NULL);		}	memset (sptr_vertex_stub, 0x00, sizeof (OSPF_SHORTEST_PATH_NODE));	sptr_vertex_stub->sptr_forward_link = NULL;	sptr_vertex_stub->sptr_backward_link = NULL;	sptr_vertex_stub->vertex = vertex;	sptr_vertex_stub->vertex = net_to_host_long (sptr_vertex_stub->vertex);	sptr_vertex_stub->sptr_database_entry = sptr_database_entry;	sptr_vertex_stub->cost = cost_D;	ospf_set_intervening_router (sptr_vertex_V, sptr_vertex_stub, sptr_area, NULL);	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Setting intervening router for stub vertex:%lx \n", vertex);	return (sptr_vertex_stub);}/*************************************************************************************//* section 16.1, stage 2, item (2) (p 154) */static OSPF_ROUTING_TABLE_ENTRY *ospf_set_routing_table_entry_for_stub_network (OSPF_ROUTING_TABLE_ENTRY *sptr_routing_table_entry,	OSPF_SHORTEST_PATH_NODE *sptr_vertex_stub,OSPF_AREA_ENTRY *sptr_area,OSPF_SHORTEST_PATH_NODE *sptr_vertex_V, OSPF_ROUTER_LINK_PIECE *sptr_link){	OSPF_ROUTING_TABLE_NODE *sptr_routing_table_node;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_set_routing_table_entry_for_stub_network\r\n");	sptr_routing_table_entry = ospf_create_routing_table_entry_for_stub_network (sptr_vertex_stub, sptr_vertex_V, sptr_area, sptr_link);	if (sptr_routing_table_entry != NULL)		{		OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "----->>>>> Adding intra stub network (ospf_set_routing_table_entry_for_stub_network ): %lx, vertex V:%lx \n",			sptr_routing_table_entry->destination_id, sptr_vertex_V->vertex);		sptr_routing_table_node = (OSPF_ROUTING_TABLE_NODE *) table_malloc (1, sizeof (OSPF_ROUTING_TABLE_NODE));		if (sptr_routing_table_node != NULL)			{			memset (sptr_routing_table_node, 0x00, sizeof (OSPF_ROUTING_TABLE_NODE));			sptr_routing_table_node->sptr_forward_link = NULL;			sptr_routing_table_node->sptr_backward_link = NULL;			sptr_routing_table_node->active_areas_discarded_entry = FALSE;			sptr_routing_table_node->sptr_routing_table_entry = sptr_routing_table_entry;			/* SPR#76812 -- Begin */			ospf_add_routing_table_node (sptr_routing_table_node);			/* SPR#76812 -- End */			}		else			{			ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) NULL, "OSPF_ROUTING_TABLE_NODE");			}        }    else        {        ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) NULL, "OSPF_ROUTING_TABLE_ENTRY");        }	return (sptr_routing_table_entry);}/**********************************************************************************************************************************/static OSPF_ROUTING_TABLE_ENTRY *ospf_update_routing_table_entry_for_stub_network (OSPF_ROUTING_TABLE_NODE *sptr_routing_table_node,	OSPF_SHORTEST_PATH_NODE *sptr_vertex_stub,OSPF_AREA_ENTRY *sptr_area,OSPF_SHORTEST_PATH_NODE *sptr_vertex_V,ULONG cost_D){	OSPF_NEXT_HOP_BLOCK *sptr_next_hop;	OSPF_ROUTING_TABLE_ENTRY*  sptr_routing_table_entry;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_update_routing_table_entry_for_stub_network\r\n");	sptr_routing_table_entry = sptr_routing_table_node->sptr_routing_table_entry;	OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "----->>>>> Adding intra area stub network (ospf_update_routing_table_entry_for_stub_network): %lx, vertex_V:%lx \n",		sptr_routing_table_entry->destination_id, sptr_vertex_V->vertex);	sptr_next_hop  = NULL;	if (cost_D == sptr_routing_table_entry->path_cost)		{		OSPF_PRINTF_ROUTING_TABLE (OSPF_ROUTING_TABLE_PRINTF, "OSPF: Updating stub network (ospf_update_routing_table_entry_for_stub_network ): %lx (equal cost next hops)\n",			sptr_routing_table_entry->destination_id);		if (ospf_get_new_next_hop_blocks_and_mark_ospf_rt_node_new (sptr_routing_table_node, sptr_vertex_stub->sptr_next_hop,			&sptr_next_hop) == TRUE)			{			ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) sptr_next_hop,				((OSPF_GENERIC_NODE *) (sptr_routing_table_node->sptr_routing_table_entry->sptr_next_hop)) );			}		if ((sptr_routing_table_entry->link_type == OSPF_LS_ROUTER) &&			(sptr_vertex_V->vertex > sptr_routing_table_entry->link_state_id))			{			if (sptr_vertex_V->vertex != ospf.router_id)				{				sptr_routing_table_entry->sptr_link_state_origin = &sptr_vertex_V->sptr_database_entry->advertisement;				sptr_routing_table_entry->link_state_id = net_to_host_long (					sptr_vertex_V->sptr_database_entry->advertisement.sptr_router->ls_header.id);				sptr_routing_table_entry->link_type = sptr_vertex_V->sptr_database_entry->advertisement.sptr_router->ls_header.type;				}			else				{				sptr_routing_table_entry->sptr_link_state_origin = NULL;				sptr_routing_table_entry->link_state_id = host_to_net_long (ospf.router_id);				sptr_routing_table_entry->link_type = OSPF_LS_ROUTER;				}			}		}	else if (cost_D < sptr_routing_table_entry->path_cost) 		/* cost_D < sptr_routing_table_entry->path_cost */		{		if (sptr_routing_table_entry->sptr_next_hop != NULL)			{			ospf_free_entire_list ((OSPF_GENERIC_NODE *) sptr_routing_table_entry->sptr_next_hop); /* Jack July 7/31 ### inher rt_entry not mallocked */			}		sptr_routing_table_entry->sptr_next_hop = ospf_inherit_the_set_of_next_hops_from_node_X (sptr_vertex_stub->sptr_next_hop);		if (sptr_routing_table_entry->sptr_next_hop == NULL)			{			sptr_routing_table_entry->sptr_next_hop = ospf_set_outgoing_interface_for_a_locally_attached_stub_network (sptr_routing_table_entry, sptr_area);			if (sptr_routing_table_entry->sptr_next_hop  == NULL)				{				table_free (sptr_routing_table_entry);				sptr_routing_table_entry = NULL;				return (NULL);				}			}		sptr_routing_table_entry->path_cost = cost_D;		if (sptr_vertex_V->vertex != ospf.router_id)			{			sptr_routing_table_entry->sptr_link_state_origin = &sptr_vertex_V->sptr_database_entry->advertisement;			sptr_routing_table_entry->link_state_id = net_to_host_long (				sptr_vertex_V->sptr_database_entry->advertisement.sptr_router->ls_header.id);			sptr_routing_table_entry->link_type = sptr_vertex_V->sptr_database_entry->advertisement.sptr_router->ls_header.type;			}		else			{			sptr_routing_table_entry->sptr_link_state_origin = NULL;			sptr_routing_table_entry->link_state_id = host_to_net_long (ospf.router_id);			sptr_routing_table_entry->link_type = OSPF_LS_ROUTER;			}		}	/* sptr_routing_table_entry->sptr_area ; ### JACK ----- was about to add this on 7/8/1998 why */	sptr_routing_table_entry->sptr_area = sptr_area;	sptr_routing_table_entry->path_type = OSPF_ROUTE_PATH_TYPE_INTRA;	sptr_routing_table_entry->abr = ospf_check_if_area_border_router();	return (sptr_routing_table_entry);}/**********************************************************************************************************************************/static OSPF_ROUTING_TABLE_ENTRY *ospf_create_routing_table_entry_for_stub_network (OSPF_SHORTEST_PATH_NODE *sptr_vertex_stub,	OSPF_SHORTEST_PATH_NODE *sptr_vertex_V,OSPF_AREA_ENTRY *sptr_area, OSPF_ROUTER_LINK_PIECE	*sptr_link){	OSPF_ROUTING_TABLE_ENTRY *sptr_routing_table_entry;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_create_routing_table_entry_for_stub_network\r\n");	sptr_routing_table_entry = (OSPF_ROUTING_TABLE_ENTRY *) table_malloc (1, sizeof (OSPF_ROUTING_TABLE_ENTRY));	if (sptr_routing_table_entry != NULL)		{		memset (sptr_routing_table_entry, 0x00, sizeof (OSPF_ROUTING_TABLE_ENTRY));		sptr_routing_table_entry->destination_type = OSPF_DESTINATION_TYPE_NETWORK;		sptr_routing_table_entry->destination_id = sptr_link->link_id;		sptr_routing_table_entry->destination_id = net_to_host_long (sptr_routing_table_entry->destination_id);		sptr_routing_table_entry->address_mask   = net_to_host_long (sptr_link->link_data);		sptr_routing_table_entry->optional_capabilities =			sptr_vertex_stub->sptr_database_entry->advertisement.sptr_router->ls_header.options;		sptr_routing_table_entry->type_of_service._byte = 0x00;		sptr_routing_table_entry->sptr_area = sptr_area;		sptr_routing_table_entry->path_type = OSPF_ROUTE_PATH_TYPE_INTRA;		sptr_routing_table_entry->path_cost = sptr_vertex_stub->cost;		sptr_routing_table_entry->abr = ospf_check_if_area_border_router();		sptr_routing_table_entry->type2_cost = 0x00;		if (sptr_vertex_V->vertex != ospf.router_id)			{			sptr_routing_table_entry->sptr_link_state_origin = &sptr_vertex_V->sptr_database_entry->advertisement;			sptr_routing_table_entry->link_state_id = net_to_host_long (				sptr_vertex_V->sptr_database_entry->advertisement.sptr_router->ls_header.id);			sptr_routing_table_entry->link_type = sptr_vertex_V->sptr_database_entry->advertisement.sptr_router->ls_header.type;			}		else			{			sptr_routing_table_entry->sptr_link_state_origin = NULL;			sptr_routing_table_entry->link_state_id = host_to_net_long (ospf.router_id); /*#$-NOTE:lcomeback-$#*/			sptr_routing_table_entry->link_type = OSPF_LS_ROUTER;			}		sptr_routing_table_entry->sptr_next_hop = ospf_inherit_the_set_of_next_hops_from_node_X (sptr_vertex_stub->sptr_next_hop);		if (sptr_routing_table_entry->sptr_next_hop == NULL)			{			sptr_routing_table_entry->sptr_next_hop = ospf_set_outgoing_interface_for_a_locally_attached_stub_network (sptr_routing_table_entry, sptr_area);			}		if (sptr_routing_table_entry->sptr_next_hop == NULL)  /* NOT LOCALLY ATTACHED BUT STILL NEXT_HOP is NULL - something is wrong ### JACK 6/29 PARICIA FIXES*/			{			table_free (sptr_routing_table_entry);			sptr_routing_table_entry = NULL;			return (NULL);			}		if (sptr_vertex_V->sptr_database_entry == NULL)										/* this is the root vertex */			{			sptr_routing_table_entry->advertising_router = sptr_vertex_V->vertex;			}		else			{			sptr_routing_table_entry->advertising_router =				sptr_vertex_V->sptr_database_entry->advertisement.sptr_router->ls_header.advertising_router;			sptr_routing_table_entry->advertising_router = net_to_host_long (sptr_routing_table_entry->advertising_router);			}		}	else		{		ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) NULL, "OSPF_ROUTING_TABLE_ENTRY");		}	return (sptr_routing_table_entry);}/**********************************************************************************************************************************/enum TEST ospf_check_if_link_exists (UNION_OSPF_LINK_STATE_ADVERTISEMENT *sptr_advertisement,ULONG vertex,OSPF_AREA_ENTRY *sptr_area){	char print_buffer[PRINT_BUFFER_SIZE];	OSPF_NETWORK_LINK_PIECE *sptr_network_link;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -