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

📄 ospf_list_utilities.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 4 页
字号:
		for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[ls_type][index]);	/* for each hash list */			index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[ls_type][index]))			{			if (sptr_ls_database_head->sptr_linear_database_entry != NULL)				{	        /* SPR#76812 */	       	for (sptr_database_entry = sptr_ls_database_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;					for (sptr_interface = sptr_area->sptr_interfaces; sptr_interface != NULL; sptr_interface = sptr_next_interface)						{						sptr_next_interface = sptr_interface->sptr_forward_link;						if (sptr_interface->area_id == sptr_area->area_id)							{							ospf_remove_current_database_copy_from_all_neighbors_retransmission_lists (sptr_database_entry, sptr_interface);							}						} /* sptr_interface */					ospf_free_database_entry (sptr_database_entry);  /* defined in ospf_link_state_database.c */					}  /* for sptr_database_entry */			  	}  /* if */            sptr_ls_database_head->sptr_linear_database_entry = NULL;			}	/* for index */        } /* for OSPF_LS_ROUTER */	/* opaque lsa free opaque lsa type 9 jkw */#if defined (__OPAQUE_LSA__)	for (ls_type = TYPE_9_LSA; ls_type <= TYPE_11_LSA; ++ls_type)							/* for each type of advertisement */		{		for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[ls_type][index]);	/* for each hash list */			index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[ls_type][index]))			{			if (sptr_ls_database_head->sptr_linear_database_entry != NULL)				{	        /* SPR#76812 */	       	for (sptr_database_entry = sptr_ls_database_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;					for (sptr_interface = sptr_area->sptr_interfaces; sptr_interface != NULL; sptr_interface = sptr_next_interface)						{						sptr_next_interface = sptr_interface->sptr_forward_link;						if (sptr_interface->area_id == sptr_area->area_id)							{							ospf_remove_current_database_copy_from_all_neighbors_retransmission_lists (sptr_database_entry, sptr_interface);							}						} /* sptr_interface */					ospf_free_database_entry (sptr_database_entry);  /* defined in ospf_link_state_database.c */					}  /* for sptr_database_entry */			  	}  /* if */			sptr_ls_database_head->sptr_linear_database_entry = NULL;			}	/* for index */        }#endif /* __OPAQUE_LSA__ */	return;}/********************************************************************************************************************************/void ospf_free_interfaces (){	OSPF_INTERFACE *sptr_next_interface = NULL;	OSPF_INTERFACE *sptr_interface = NULL;	OSPF_NEIGHBOR *sptr_neighbor = NULL;	OSPF_NEIGHBOR *sptr_next_neighbor = NULL;	OSPF_AREA_ENTRY *sptr_area = NULL;	OSPF_AREA_ENTRY *sptr_next_area = NULL;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_interfaces\r\n");	/* SPR#76812 */	semTake (ospf_config_mutex, WAIT_FOREVER);	for (sptr_area = ospf.sptr_area_list; sptr_area != NULL; sptr_area = sptr_next_area)		{		sptr_next_area = sptr_area->sptr_forward_link;		for (sptr_interface = sptr_area->sptr_interfaces; sptr_interface != NULL; sptr_interface = sptr_next_interface )			{			sptr_next_interface = sptr_interface->sptr_forward_link;			if (sptr_interface->area_id == sptr_area->area_id)				{				for ( sptr_neighbor = sptr_interface->sptr_neighbor; sptr_neighbor != NULL;					sptr_neighbor = sptr_next_neighbor )					{					/*					 * Free interfaces neighbors					 */					sptr_next_neighbor = sptr_neighbor->sptr_forward_link;					ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_interface->sptr_neighbor), (OSPF_GENERIC_NODE *) sptr_neighbor);					ospf_free_neighbor (sptr_neighbor);				   	}				ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_area->sptr_interfaces), (OSPF_GENERIC_NODE*) sptr_interface);				ospf_free_interface_acknowledgement_list (sptr_interface, FALSE /* free all no matter what */);				if (sptr_interface->sptr_authentication_key != NULL)					{					ospf_free_entire_list ((OSPF_GENERIC_NODE*) sptr_interface->sptr_authentication_key);					}				table_free ( (void*) sptr_interface);				sptr_interface = NULL;				}			}		sptr_area->sptr_interfaces = NULL;		}	semGive (ospf_config_mutex);}/********************************************************************************************************************************/void ospf_free_neighbor (OSPF_NEIGHBOR* sptr_neighbor){	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_neighbor\r\n");	if (sptr_neighbor->state == OSPF_NEIGHBOR_DOWN)		{		ospf_search_ls_database_and_remove_neighbor_from_that_lsas_neighbor_retx_list_on_event_neighbor_down (sptr_neighbor);		}	ospf_remove_all_database_pointers_from_neighbor_retransmit_list (sptr_neighbor);	ospf_free_neighbor_database_summary_list (sptr_neighbor);	ospf_free_neighbor_ls_request_list (sptr_neighbor);	/* At this point in time neighbor must be already removed from list */	table_free ((void*) sptr_neighbor);	sptr_neighbor = NULL;	return;}/********************************************************************************************************************************/void ospf_search_ls_database_and_remove_neighbor_from_that_lsas_neighbor_retx_list_on_event_neighbor_down (OSPF_NEIGHBOR* sptr_neighbor){	ULONG ls_type;	ULONG index;	OSPF_LS_DATABASE_ENTRY *sptr_ls_database_entry;	OSPF_LS_DATABASE_ENTRY *sptr_next_ls_database_entry;	OSPF_LS_DATABASE_HEAD *sptr_ls_database_head;	OSPF_NEIGHBOR_LIST *sptr_neighbor_node;	OSPF_NEIGHBOR_LIST *sptr_next_neighbor_node;	OSPF_NEIGHBOR *sptr_neighbor_on_retrans_list;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_search_ls_database_and_remove_neighbor_from_that_lsas_neighbor_retx_list_on_event_neighbor_down\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__*/		for (index = 0x00000000L, sptr_ls_database_head = &(sptr_neighbor->sptr_interface->sptr_area->ls_database_hash_table[ls_type][index]);	/* for each hash list */			index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_neighbor->sptr_interface->sptr_area->ls_database_hash_table[ls_type][index]))			{	        /* SPR#76812 */	       	for (sptr_ls_database_entry = sptr_ls_database_head->sptr_linear_database_entry;	       		sptr_ls_database_entry != NULL;	       	    sptr_ls_database_entry = sptr_next_ls_database_entry)				{				sptr_next_ls_database_entry = sptr_ls_database_entry->sptr_forward_link;				for (sptr_neighbor_node = sptr_ls_database_entry->sptr_ls_database_retrans; sptr_neighbor_node != NULL; sptr_neighbor_node  = sptr_next_neighbor_node )					{					sptr_next_neighbor_node = sptr_neighbor_node->sptr_forward_link;					sptr_neighbor_on_retrans_list = sptr_neighbor_node->sptr_neighbor;					if ( sptr_neighbor_on_retrans_list == sptr_neighbor)						{						ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_ls_database_entry->sptr_ls_database_retrans),							(OSPF_GENERIC_NODE *) sptr_neighbor_node);						table_free ((void *) sptr_neighbor_node);						sptr_neighbor_node = NULL;						}					}				}			}		}	/* Check for external lsdb */	for (index = 0x00000000L, sptr_ls_database_head = &(ospf.external_database_hash_table[LS_EXTERNAL_LSA][index]);	/* for each hash list */		index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(ospf.external_database_hash_table[LS_EXTERNAL_LSA][index]))		{		if (sptr_ls_database_head == NULL)			{			continue;			}        /* SPR#76812 */       	for (sptr_ls_database_entry = sptr_ls_database_head->sptr_linear_database_entry;       		sptr_ls_database_entry != NULL;       	    sptr_ls_database_entry = sptr_next_ls_database_entry)			{			sptr_next_ls_database_entry = sptr_ls_database_entry->sptr_forward_link;			for (sptr_neighbor_node = sptr_ls_database_entry->sptr_ls_database_retrans; sptr_neighbor_node != NULL; sptr_neighbor_node  = sptr_next_neighbor_node )				{				sptr_next_neighbor_node = sptr_neighbor_node->sptr_forward_link;				sptr_neighbor_on_retrans_list = sptr_neighbor_node->sptr_neighbor;				if ( sptr_neighbor_on_retrans_list == sptr_neighbor)					{					ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_ls_database_entry->sptr_ls_database_retrans),						(OSPF_GENERIC_NODE *) sptr_neighbor_node);					table_free ((void *) sptr_neighbor_node);					sptr_neighbor_node = NULL;					}				}			}		}	/* opaque lsa scan through opaque lsdb jkw */#if defined (__OPAQUE_LSA__)    for (ls_type = TYPE_9_LSA; ls_type <= TYPE_11_LSA; ++ls_type)                            /* for each type of advertisement */		{		for (index = 0x00000000L, sptr_ls_database_head = &(sptr_neighbor->sptr_interface->sptr_area->opaque_ls_database_hash_table[ls_type][index]);	/* for each hash list */			index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_neighbor->sptr_interface->sptr_area->opaque_ls_database_hash_table[ls_type][index]))			{	        /* SPR#76812 */	       	for (sptr_ls_database_entry = sptr_ls_database_head->sptr_linear_database_entry;	       		sptr_ls_database_entry != NULL;	       	    sptr_ls_database_entry = sptr_next_ls_database_entry)				{				sptr_next_ls_database_entry = sptr_ls_database_entry->sptr_forward_link;				for (sptr_neighbor_node = sptr_ls_database_entry->sptr_ls_database_retrans; sptr_neighbor_node != NULL; sptr_neighbor_node  = sptr_next_neighbor_node )					{					sptr_next_neighbor_node = sptr_neighbor_node->sptr_forward_link;					sptr_neighbor_on_retrans_list = sptr_neighbor_node->sptr_neighbor;					if ( sptr_neighbor_on_retrans_list == sptr_neighbor)						{						ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_ls_database_entry->sptr_ls_database_retrans),							(OSPF_GENERIC_NODE *) sptr_neighbor_node);						table_free ((void *) sptr_neighbor_node);						sptr_neighbor_node = NULL;						}					}				}			}		}	/* Check for type 11 lsdb */	for (index = 0x00000000L, sptr_ls_database_head = &(ospf.type_11_database_hash_table[LS_TYPE_11_LSA][index]);	/* for each hash list */		index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(ospf.type_11_database_hash_table[LS_TYPE_11_LSA][index]))		{		if (sptr_ls_database_head == NULL)			{			continue;			}        /* SPR#76812 */       	for (sptr_ls_database_entry = sptr_ls_database_head->sptr_linear_database_entry;       		sptr_ls_database_entry != NULL;       	    sptr_ls_database_entry = sptr_next_ls_database_entry)			{			sptr_next_ls_database_entry = sptr_ls_database_entry->sptr_forward_link;			for (sptr_neighbor_node = sptr_ls_database_entry->sptr_ls_database_retrans; sptr_neighbor_node != NULL; sptr_neighbor_node  = sptr_next_neighbor_node )				{				sptr_next_neighbor_node = sptr_neighbor_node->sptr_forward_link;				sptr_neighbor_on_retrans_list = sptr_neighbor_node->sptr_neighbor;				if ( sptr_neighbor_on_retrans_list == sptr_neighbor)					{					ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_ls_database_entry->sptr_ls_database_retrans),						(OSPF_GENERIC_NODE *) sptr_neighbor_node);					table_free ((void *) sptr_neighbor_node);					sptr_neighbor_node = NULL;					}				}			}		}#endif /* __OPAQUE_LSA__ */	return; }

⌨️ 快捷键说明

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