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

📄 ospf_list_utilities.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 4 页
字号:
		sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router->ls_header.age =			sptr_advertisement->advertisement.sptr_router->ls_header.age;		length = net_to_host_short (sptr_advertisement->advertisement.sptr_router->ls_header.length);		result = memcmp ( sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router,					sptr_advertisement->advertisement.sptr_router, (size_t) length);		if ( result == 0 )			{			sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router->ls_header.age =				old_age;			return (sptr_retransmission_node);			}		sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router->ls_header.age =			old_age;		}	return (NULL);}/**********************************************************************************************************************************/void ospf_remove_node_from_neighbors_retransmit_queue (OSPF_NEIGHBOR *sptr_neighbor,OSPF_LS_DATABASE_NODE *sptr_retransmission_node){	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_remove_node_from_neighbors_retransmit_queue\r\n");	if (sptr_retransmission_node != NULL)		{		ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_neighbor->sptr_retransmit), (OSPF_GENERIC_NODE *) sptr_retransmission_node);		table_free ( (void*) sptr_retransmission_node->sptr_ls_database_entry);		sptr_retransmission_node->sptr_ls_database_entry = NULL;		/*		 * A copy of the node wass made; when it was out on the neighbor's retransmit que.		 * So OK to call free. (See ospf_flood.c)		 */		table_free ((void *) sptr_retransmission_node);		sptr_retransmission_node = NULL;		--sptr_neighbor->retransmit_queue_count;		}	return;}/**********************************************************************************************************************************/void ospf_remove_neighbor_from_advertisements_retransmit_list (OSPF_LS_DATABASE_ENTRY *sptr_advertisement,OSPF_NEIGHBOR *sptr_neighbor){	OSPF_NEIGHBOR_LIST *sptr_neighbor_list;	OSPF_NEIGHBOR_LIST *sptr_next_neighbor_list;	seq_t sequence_number;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_remove_neighbor_from_advertisements_retransmit_list\r\n");	for (sptr_neighbor_list = sptr_advertisement->sptr_ls_database_retrans; sptr_neighbor_list != NULL;		sptr_neighbor_list = sptr_next_neighbor_list)		{		sptr_next_neighbor_list = sptr_neighbor_list->sptr_forward_link;		if (sptr_neighbor_list->sptr_neighbor == sptr_neighbor)			{			ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_advertisement->sptr_ls_database_retrans),				(OSPF_GENERIC_NODE *) sptr_neighbor_list);			table_free ((void *) sptr_neighbor_list);			sptr_neighbor_list = NULL;			/* section 12.1.6 (page 109-110) */			if ((sptr_advertisement->ls_database_sequence_state == OSPF_WAITING_FOR_MAXIMUM_SEQUENCE_INSTANCE_TO_BE_FLUSHED) &&				(sptr_advertisement->sptr_ls_database_retrans == NULL))				{				sptr_advertisement->ls_database_sequence_state = OSPF_DONE_FLUSHING_MAXIMUM_SEQUENCE_INSTANCE;                                /* Fix TSR# 287037 Start */                                sequence_number = OSPFMAXLSSEQ;  /* was   OSPFINVALDLSSEQ */                                /* Fix TSR# 287037 End */				sequence_number = host_to_net_long(sequence_number);				sptr_advertisement->advertisement.sptr_router->ls_header.sequence_number = sequence_number;				ospf_originate_new_instance_of_the_link_state_advertisement (sptr_advertisement, sptr_neighbor->sptr_interface->sptr_area, FALSE);				sptr_advertisement->ls_database_sequence_state = OSPF_NORMAL;				}			return;			}		}	return;}/***********************************************************************************************************************************/void ospf_add_database_entry_to_neighbor_retransmit_list (OSPF_NEIGHBOR *sptr_neighbor,OSPF_LS_DATABASE_ENTRY *sptr_database_entry){	OSPF_LS_DATABASE_NODE *sptr_ls_database_node;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_add_database_entry_to_neighbor_retransmit_list\r\n");	sptr_ls_database_node = (OSPF_LS_DATABASE_NODE *) table_malloc  (1, sizeof (OSPF_LS_DATABASE_NODE));	if (sptr_ls_database_node == NULL)		{		ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) NULL, "OSPF_LS_DATABASE_NODE");		return;		}	memset (sptr_ls_database_node, 0x00, sizeof (OSPF_LS_DATABASE_NODE));	sptr_ls_database_node->sptr_ls_database_entry = sptr_database_entry;	sptr_ls_database_node->flood = TRUE;	sptr_ls_database_node->periodic_retransmit_time_counter = 0x00000000L;	if (sptr_neighbor->sptr_retransmit == NULL)		{		sptr_neighbor->sptr_retransmit = sptr_ls_database_node;		sptr_neighbor->sptr_retransmit->sptr_forward_link = NULL;		sptr_neighbor->sptr_retransmit->sptr_backward_link = NULL;		}	else		{		ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) sptr_ls_database_node, (OSPF_GENERIC_NODE *) sptr_neighbor->sptr_retransmit);		}	++sptr_neighbor->retransmit_queue_count;	return;}/**********************************************************************************************************************************/void ospf_add_neighbor_to_database_retransmit_list (OSPF_LS_DATABASE_ENTRY *sptr_database_entry,OSPF_NEIGHBOR *sptr_neighbor){	OSPF_NEIGHBOR_LIST *sptr_neighbor_list;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_add_neighbor_to_database_retransmit_list\r\n");	sptr_neighbor_list = (OSPF_NEIGHBOR_LIST *) table_malloc  (1, sizeof (OSPF_NEIGHBOR_LIST));	if (sptr_neighbor_list == NULL)		{		ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) NULL, "OSPF_NEIGHBOR_LIST");		return;		}	memset (sptr_neighbor_list, 0x00, sizeof (OSPF_NEIGHBOR_LIST));	sptr_neighbor_list->sptr_neighbor = sptr_neighbor;	if (sptr_database_entry->sptr_ls_database_retrans == NULL)		{		sptr_database_entry->sptr_ls_database_retrans = sptr_neighbor_list;		sptr_database_entry->sptr_ls_database_retrans->sptr_forward_link = NULL;		sptr_database_entry->sptr_ls_database_retrans->sptr_backward_link = NULL;		}	else		{		ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) sptr_neighbor_list, (OSPF_GENERIC_NODE *) sptr_database_entry->sptr_ls_database_retrans);		}	return;}/**********************************************************************************************************************************/void ospf_clean_up_retransmit_lists_affiliated_with_this_advertisement (OSPF_LS_DATABASE_ENTRY *sptr_advertisement){	OSPF_NEIGHBOR_LIST *sptr_neighbor_list;	OSPF_NEIGHBOR_LIST *sptr_next_neighbor_list;	OSPF_LS_DATABASE_NODE *sptr_retransmission_node;	/* remove from all neighbors' lists */	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_clean_up_retransmit_lists_affiliated_with_this_advertisement\r\n");	for (sptr_neighbor_list = sptr_advertisement->sptr_ls_database_retrans; sptr_neighbor_list != NULL;		sptr_neighbor_list = sptr_next_neighbor_list)		{		sptr_next_neighbor_list = sptr_neighbor_list->sptr_forward_link;		/* remove from neighbor list */        sptr_retransmission_node = ospf_find_advertisement_on_neighbors_retransmit_list (sptr_neighbor_list->sptr_neighbor, sptr_advertisement);		if (sptr_retransmission_node != NULL)			{			ospf_remove_node_from_neighbors_retransmit_queue (sptr_neighbor_list->sptr_neighbor, sptr_retransmission_node);			}        ospf_neighbors_remove_all_advertisement_from_transmit_list (sptr_neighbor_list->sptr_neighbor, sptr_advertisement);		/* remove from ls_database's neighbor list */		ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_advertisement->sptr_ls_database_retrans), (OSPF_GENERIC_NODE *) sptr_neighbor_list);		table_free ((void *) sptr_neighbor_list);		sptr_neighbor_list = NULL;		}	sptr_advertisement->sptr_ls_database_retrans = NULL;	return;}/**********************************************************************************************************************************/static void ospf_neighbors_remove_all_advertisement_from_transmit_list (OSPF_NEIGHBOR *sptr_neighbor, OSPF_LS_DATABASE_ENTRY *sptr_advertisement){	OSPF_LS_DATABASE_NODE *sptr_retransmission_node;	OSPF_LS_DATABASE_NODE *sptr_next_retransmission_node;	int result;	int count;	USHORT saved_age;	USHORT length;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_neighbors_remove_all_advertisement_from_transmit_list\r\n");	sptr_retransmission_node = NULL;	sptr_next_retransmission_node = NULL;	result = 0x0000;	saved_age = 0x0000;	length = 0x0000;	count = 0x0000;	for (sptr_retransmission_node = sptr_neighbor->sptr_retransmit; sptr_retransmission_node != NULL;		sptr_retransmission_node = sptr_next_retransmission_node)		{		sptr_next_retransmission_node =sptr_retransmission_node->sptr_forward_link;		saved_age = sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router->ls_header.age;		sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router->ls_header.age =			sptr_advertisement->advertisement.sptr_router->ls_header.age;		length = sptr_advertisement->advertisement.sptr_router->ls_header.length;		length = (USHORT)(net_to_host_short ((USHORT)length));		result = memcmp ( sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router,					sptr_advertisement->advertisement.sptr_router, (size_t) length);		sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router->ls_header.age = saved_age;		if ( result == 0 )			{			ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_neighbor->sptr_retransmit),				(OSPF_GENERIC_NODE *) sptr_retransmission_node);														/* remove from neighbor's retransmit list */			table_free ( (void*) sptr_retransmission_node->sptr_ls_database_entry);			sptr_retransmission_node->sptr_ls_database_entry = NULL;			table_free ((void *) sptr_retransmission_node);			sptr_retransmission_node = NULL;			++count;			}		} /*for*/	return ;}/***************************************************************************************//* section 13, item (5c) - (page 134) */void ospf_remove_current_database_copy_from_all_neighbors_retransmission_lists (OSPF_LS_DATABASE_ENTRY *sptr_database_entry,	OSPF_INTERFACE *sptr_interface){	OSPF_NEIGHBOR *sptr_neighbor_to_act_on = NULL;	OSPF_NEIGHBOR *sptr_next_neighbor_to_act_on = NULL;	OSPF_LS_DATABASE_NODE *sptr_retransmission_node = NULL;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_remove_current_database_copy_from_all_neighbors_retransmission_lists\r\n");	if (sptr_interface == NULL)		{		return;		}	for (sptr_neighbor_to_act_on = sptr_interface->sptr_neighbor; sptr_neighbor_to_act_on != NULL;		sptr_neighbor_to_act_on = sptr_next_neighbor_to_act_on)		{		sptr_next_neighbor_to_act_on = sptr_neighbor_to_act_on->sptr_forward_link;		ospf_remove_neighbor_from_advertisements_retransmit_list (sptr_database_entry, sptr_neighbor_to_act_on);		sptr_retransmission_node = ospf_find_advertisement_on_neighbors_retransmit_list (sptr_neighbor_to_act_on, sptr_database_entry);		if (sptr_retransmission_node != NULL)			{			ospf_remove_node_from_neighbors_retransmit_queue (sptr_neighbor_to_act_on, sptr_retransmission_node);			}		}	return;}/**********************************************************************************************************************************/void ospf_remove_all_database_pointers_from_neighbor_retransmit_list (OSPF_NEIGHBOR *sptr_neighbor){	OSPF_LS_DATABASE_NODE *sptr_retransmission_node;	OSPF_LS_DATABASE_NODE *sptr_next_retransmission_node;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_remove_all_database_pointers_from_neighbor_retransmit_list\r\n");	if ( sptr_neighbor == NULL )        return;	for (sptr_retransmission_node = sptr_neighbor->sptr_retransmit; sptr_retransmission_node != NULL;		sptr_retransmission_node = sptr_next_retransmission_node)		{		sptr_next_retransmission_node = sptr_retransmission_node->sptr_forward_link;		ospf_remove_neighbor_from_advertisements_retransmit_list (sptr_retransmission_node->sptr_ls_database_entry, sptr_neighbor);		/* remove from ls_database */		ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_neighbor->sptr_retransmit),			(OSPF_GENERIC_NODE *) sptr_retransmission_node);														/* remove from neighbor's retransmit list */		table_free ( (void*) sptr_retransmission_node->sptr_ls_database_entry);		sptr_retransmission_node->sptr_ls_database_entry = NULL;		table_free ((void *) sptr_retransmission_node);		sptr_retransmission_node = NULL;

⌨️ 快捷键说明

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