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

📄 ospf_list_utilities.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 4 页
字号:
		--sptr_neighbor->retransmit_queue_count;		}	sptr_neighbor->sptr_retransmit = NULL;	return;}/***********************************************************************************************************************************/void ospf_free_neighbor_database_summary_list (OSPF_NEIGHBOR *sptr_neighbor){	OSPF_LS_DATABASE_SUMMARY *sptr_database_summary_node_to_free;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_neighbor_database_summary_list\r\n");    if ( sptr_neighbor == NULL )        return;	if (sptr_neighbor->sptr_database_summary != NULL)		{		for (sptr_database_summary_node_to_free = sptr_neighbor->sptr_database_summary;			sptr_database_summary_node_to_free != NULL;			sptr_database_summary_node_to_free = sptr_neighbor->sptr_database_summary)			{			sptr_neighbor->sptr_database_summary = sptr_neighbor->sptr_database_summary->sptr_forward_link;			ospf_free_ls_database_summary (sptr_database_summary_node_to_free);			}		sptr_neighbor->sptr_database_summary = NULL;		}	sptr_neighbor->database_summary_queue_count = 0x0000;	return;}/**********************************************************************************************************************************/OSPF_LS_REQUEST *ospf_find_advertisement_on_neighbors_ls_request_list (OSPF_NEIGHBOR *sptr_neighbor,OSPF_LS_DATABASE_ENTRY *sptr_advertisement){	OSPF_LS_REQUEST *sptr_ls_request_node;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_find_advertisement_on_neighbors_ls_request_list\r\n");	for (sptr_ls_request_node = sptr_neighbor->sptr_ls_request[sptr_advertisement->advertisement.sptr_router->ls_header.type];		sptr_ls_request_node != NULL; sptr_ls_request_node = sptr_ls_request_node->sptr_forward_link)		{		if (sptr_ls_request_node->advertising_router == sptr_advertisement->advertisement.sptr_router->ls_header.advertising_router)			{            /* SPR#89187 */            if (sptr_ls_request_node->id == sptr_advertisement->advertisement.sptr_router->ls_header.id)                {                return (sptr_ls_request_node);			    }			}		}	return (NULL);					/* not found */}/***********************************************************************************************************************************/void ospf_free_neighbor_ls_request_list (OSPF_NEIGHBOR *sptr_neighbor){	enum OSPF_LS_TYPE type;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_neighbor_ls_request_list\r\n");    if ( sptr_neighbor == NULL )        return;#if defined (__OPAQUE_LSA__)	for (type = OSPF_LS_ROUTER; type <= OSPF_LS_TYPE_11; ++type)							/* for each type of advertisement */#else /* __OPAQUE_LSA__ */#if !defined (__NSSA__)	for (type = OSPF_LS_ROUTER; type <= OSPF_LS_AS_EXTERNAL; ++type)							/* for each type of advertisement */#else	for (type = OSPF_LS_ROUTER; type <= OSPF_LS_TYPE_7; ++type)							/* for each type of advertisement */#endif /*__NSSA__*/#endif /* __OPAQUE_LSA__ */		{#if defined (__NSSA__)		if (type == OSPF_LS_MULTICAST )					continue;#endif /*__NSSA__*/		if (sptr_neighbor->sptr_ls_request[type] != NULL)			{			sptr_neighbor->sptr_ls_request[type] = (OSPF_LS_REQUEST *) ospf_free_entire_list ((OSPF_GENERIC_NODE *) sptr_neighbor->sptr_ls_request[type]);			}		}	sptr_neighbor->ls_request_queue_count = 0x0000;	sptr_neighbor->ls_request_list_has_changed = TRUE;	return;}/***********************************************************************************************************************************/void ospf_free_interface_acknowledgement_list (OSPF_INTERFACE *sptr_interface,enum BOOLEAN check_number_of_neighbors_in_init_state){	OSPF_LS_HEADER_QUEUE *sptr_acknowledgement;	OSPF_LS_HEADER_QUEUE *sptr_next;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_interface_acknowledgement_list\r\n");    if ( sptr_interface == NULL )        return;	if (check_number_of_neighbors_in_init_state == TRUE)		{		if (sptr_interface->number_of_neighbors_in_init_state != 0x01)			{			return;			}		}	for (sptr_acknowledgement = sptr_interface->sptr_head_of_delayed_acknowledgement_list; sptr_acknowledgement != NULL;		sptr_acknowledgement = sptr_next)		{		sptr_next = sptr_acknowledgement->sptr_forward_link; 		table_free ((void *) sptr_acknowledgement);		sptr_acknowledgement = NULL;		}	sptr_interface->sptr_head_of_delayed_acknowledgement_list = NULL;	sptr_interface->number_of_acknowledgements_on_delayed_acknowledgement_list = 0x00000000L;	sptr_interface->delayed_acknowledgement_timer_enabled = FALSE;	return;}/********************************************************************************************************************************/void ospf_free_ospf_classes_area_lists (void){	OSPF_AREA_ENTRY *sptr_area;	OSPF_AREA_ENTRY *sptr_next_area;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_ospf_classes_area_lists\r\n");	/* Free stub areas */	if (ospf.sptr_stub_area_list != NULL)		{		ospf_free_entire_list ((OSPF_GENERIC_NODE*) ospf.sptr_stub_area_list);		}	/* Free all the areas */	for ( sptr_area = ospf.sptr_area_list;  sptr_area != NULL; sptr_area = sptr_next_area)		{		sptr_next_area = sptr_area->sptr_forward_link;		ospf_free_all_the_associated_area_pointers (sptr_area);		/* SPR#76812 */		semTake (ospf_config_mutex, WAIT_FOREVER);		ospf_remove_node_from_list ( (OSPF_GENERIC_NODE **) &(ospf.sptr_area_list), (OSPF_GENERIC_NODE*) sptr_area);		semGive (ospf_config_mutex);		table_free ((void*) sptr_area);		sptr_area = NULL;		}}/********************************************************************************************************************************/void ospf_free_all_the_associated_area_pointers (OSPF_AREA_ENTRY* sptr_area){	OSPF_ADDRESS_RANGE_LIST_ENTRY *sptr_address_ranges;	OSPF_ADDRESS_RANGE_LIST_ENTRY *sptr_next_address_ranges;	OSPF_ADVERTISEMENT_NODE *sptr_summary_advertisement_list;	OSPF_ADVERTISEMENT_NODE *sptr_next_summary_advertisement_list;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_all_the_associated_area_pointers\r\n");	/* Free area's address_ranges */	if (sptr_area->sptr_address_ranges != NULL)		{		for (sptr_address_ranges = sptr_area->sptr_address_ranges; sptr_address_ranges != NULL;			sptr_address_ranges = sptr_next_address_ranges)			{			sptr_next_address_ranges = sptr_address_ranges->sptr_forward_link;			ospf_remove_node_from_list ( (OSPF_GENERIC_NODE **) &sptr_area->sptr_address_ranges,				(OSPF_GENERIC_NODE*) sptr_address_ranges);			/* Free this address_range's discarded route list */			ospf_free_routing_table_nodes (sptr_address_ranges->sptr_discard_entries);			table_free ((void*) sptr_address_ranges);			sptr_address_ranges = NULL;			}        sptr_area->sptr_address_ranges = NULL;		}	/* Free area's summary_advertisements */	for (sptr_summary_advertisement_list = sptr_area->sptr_summary_advertisement_list_head; sptr_summary_advertisement_list != NULL;		sptr_summary_advertisement_list = sptr_next_summary_advertisement_list )		{		sptr_next_summary_advertisement_list = sptr_summary_advertisement_list->sptr_forward_link;		ospf_remove_node_from_list ( (OSPF_GENERIC_NODE **) &sptr_area->sptr_summary_advertisement_list_head,			(OSPF_GENERIC_NODE*) sptr_summary_advertisement_list);		table_free ((void*) sptr_summary_advertisement_list );		sptr_summary_advertisement_list  = NULL;		}    sptr_area->sptr_summary_advertisement_list_head = NULL;	/* Free area's shortest_path tree, Read the comments in the called function to findout why it's called twice */	if (sptr_area->shortest_path_first_tree.sptr_forward_link != NULL)		{        ospf_free_areas_shortest_path_tree_nodes (sptr_area->shortest_path_first_tree.sptr_forward_link);		/* free associated next_hops */		if (sptr_area->shortest_path_first_tree.sptr_next_hop != NULL)			{			ospf_free_entire_list ((OSPF_GENERIC_NODE*) sptr_area->shortest_path_first_tree.sptr_next_hop);			}        sptr_area->shortest_path_first_tree.sptr_forward_link = NULL;		sptr_area->shortest_path_first_tree.sptr_backward_link = NULL;		sptr_area->shortest_path_first_tree.sptr_next_hop = NULL;		}   	if (sptr_area->sptr_candidate != NULL)   		{		ospf_free_areas_shortest_path_tree_nodes ( sptr_area->sptr_candidate);		}    sptr_area->sptr_candidate = NULL;	ospf_free_areas_link_state_database (sptr_area);	return;}/********************************************************************************************************************************/void ospf_free_routing_table_nodes (OSPF_ROUTING_TABLE_NODE *sptr_first_discarded_or_valid_routing_table_node){	OSPF_ROUTING_TABLE_NODE *sptr_discarded_routing_table_node;	OSPF_ROUTING_TABLE_NODE *sptr_next_discarded_routing_table_node;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_routing_table_nodes\r\n");  	for (sptr_discarded_routing_table_node = sptr_first_discarded_or_valid_routing_table_node; sptr_discarded_routing_table_node != NULL;  		sptr_discarded_routing_table_node = sptr_next_discarded_routing_table_node)  		{  		sptr_next_discarded_routing_table_node = sptr_discarded_routing_table_node->sptr_forward_link;  		ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_first_discarded_or_valid_routing_table_node),  			(OSPF_GENERIC_NODE*) sptr_discarded_routing_table_node);		if (sptr_discarded_routing_table_node->sptr_routing_table_entry->sptr_next_hop != NULL)			{  			ospf_free_entire_list ((OSPF_GENERIC_NODE*) sptr_discarded_routing_table_node->sptr_routing_table_entry->sptr_next_hop);			}		if (sptr_discarded_routing_table_node->sptr_routing_table_entry != NULL)			{			table_free ((void*) sptr_discarded_routing_table_node->sptr_routing_table_entry );			sptr_discarded_routing_table_node->sptr_routing_table_entry  = NULL;			}  		table_free ((void*) sptr_discarded_routing_table_node);		sptr_discarded_routing_table_node = NULL;  		}	return;}/********************************************************************************************************************************/void ospf_free_areas_shortest_path_tree_nodes (OSPF_SHORTEST_PATH_NODE* sptr_first_shortest_path_candidate){	OSPF_SHORTEST_PATH_NODE *sptr_shortest_path_candidate;	OSPF_SHORTEST_PATH_NODE *sptr_next_shortest_path_candidate;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_areas_shortest_path_tree_nodes\r\n");	for (sptr_shortest_path_candidate = sptr_first_shortest_path_candidate; sptr_shortest_path_candidate != NULL;		sptr_shortest_path_candidate = sptr_next_shortest_path_candidate )		{		sptr_next_shortest_path_candidate = sptr_shortest_path_candidate->sptr_forward_link;		ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_first_shortest_path_candidate), (OSPF_GENERIC_NODE*) sptr_shortest_path_candidate );		/* free associated next_hops */		if ((sptr_shortest_path_candidate != NULL) && (sptr_shortest_path_candidate->sptr_next_hop != NULL))			{			ospf_free_entire_list ((OSPF_GENERIC_NODE*) sptr_shortest_path_candidate->sptr_next_hop);			}		table_free ((void*) sptr_shortest_path_candidate );		sptr_shortest_path_candidate  = NULL;		}	return;}/********************************************************************************************************************************/void ospf_free_areas_link_state_database (OSPF_AREA_ENTRY *sptr_area){	BYTE ls_type;	ULONG index;	OSPF_LS_DATABASE_HEAD *sptr_ls_database_head;	OSPF_LS_DATABASE_ENTRY *sptr_database_entry;	OSPF_LS_DATABASE_ENTRY *sptr_next_database_entry = NULL;	OSPF_INTERFACE *sptr_interface = NULL;	OSPF_INTERFACE *sptr_next_interface = NULL;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_areas_link_state_database\r\n");#if !defined (__NSSA__)	for (ls_type = OSPF_LS_ROUTER; ls_type <= OSPF_LS_AS_EXTERNAL; ++ls_type)							/* for each type of advertisement */#else	for (ls_type = OSPF_LS_ROUTER; ls_type <= OSPF_LS_TYPE_7; ++ls_type)							/* for each type of advertisement */#endif /*__NSSA__*/		{#if defined (__NSSA__)		if (ls_type == OSPF_LS_MULTICAST )					continue;#endif /*__NSSA__*/

⌨️ 快捷键说明

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