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

📄 ospf_opaque_lsa.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 5 页
字号:
							sptr_next_database_entry = sptr_database_entry->sptr_forward_link;														if ( sptr_database_entry->advertisement.sptr_type_10 != NULL )								{								opaque_lsa_count++;								}							}						}					sptr_area = sptr_area->sptr_forward_link;					}				break;			case OSPF_LS_TYPE_11:				sptr_ls_database_head = NULL;				sptr_database_entry = NULL;				index =0;				/* 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_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;													if ( sptr_database_entry->advertisement.sptr_type_11 != NULL )							{							opaque_lsa_count++;							}						}					}				break;			}		semGive (ospf_global_mutex );		return opaque_lsa_count;		}	else		{		semGive (ospf_global_mutex );		return 0;		}    }/***********************************************************************************************************************************//*	Function: ospfRetrieveType9	Input: enum OSPF_SEARCH_TYPE - OSPF_SEARCH_LSA_TYPE|OSPF_SEARCH_LSA_ID|OSPF_SEARCH_ADVERTISING_ROUTER		   ULONG - key_value		   ULONG - area_id	RETURNS: OSPF_TYPE_9_LSA_LINK * - link list of type 9 link state advertisements	Description: This function retrieves the type 9 opaque lsas from the opaque lsdb.*/OSPF_TYPE_9_LSA_LINK *ospfRetrieveType9    (    enum OSPF_SEARCH_TYPE key,     ULONG key_value,     ULONG area_id    )    {	OSPF_AREA_ENTRY *sptr_area = ospf.sptr_area_list;	OSPF_LS_DATABASE_HEAD *sptr_ls_database_head = NULL;	OSPF_LS_DATABASE_ENTRY *sptr_database_entry = NULL;	OSPF_LS_DATABASE_ENTRY *sptr_next_database_entry = NULL;    ULONG index;	OSPF_TYPE_9_LSA_LINK *type_9_lsa_head = NULL;	OSPF_TYPE_9_LSA_LINK *type_9_lsa = NULL;	USHORT size_of_opaque_lsa = 0;	USHORT size_of_type_9_lsa = 0;	USHORT size_of_link_list_pointers = 0;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospfRetrieveType9\r\n");	key_value = net_to_host_long(key_value);	semTake (ospf_global_mutex , WAIT_FOREVER);	    if (ospf.opaque_capability == TRUE)		{		size_of_link_list_pointers = sizeof(OSPF_TYPE_9_LSA_LINK *) + sizeof(OSPF_TYPE_9_LSA_LINK *);		while (sptr_area != NULL)			{			if (sptr_area->area_id == area_id)				{				for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[TYPE_9_LSA][index]);	/* for each hash list */					index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[TYPE_9_LSA][index]))					{					/* 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;												if ( sptr_database_entry->advertisement.sptr_type_9 != NULL )							{							if (key == OSPF_SEARCH_ADVERTISING_ROUTER)								{								if (sptr_database_entry->advertisement.sptr_type_9->ls_header.advertising_router == key_value)									{									size_of_opaque_lsa = sptr_database_entry->advertisement.sptr_type_9->ls_header.length;									size_of_opaque_lsa = net_to_host_short(size_of_opaque_lsa);									/* Add forward and backward pointer length */									size_of_type_9_lsa = (USHORT)(size_of_opaque_lsa + size_of_link_list_pointers);									type_9_lsa = table_malloc(1, size_of_type_9_lsa);									if (type_9_lsa == NULL)										{										if (type_9_lsa_head != NULL)											{											ospf_free_entire_list ((OSPF_GENERIC_NODE*) type_9_lsa_head);											}										type_9_lsa_head = NULL;										semGive (ospf_global_mutex );										return NULL;										}									else										{										memcpy(((BYTE *)(type_9_lsa)+size_of_link_list_pointers), sptr_database_entry->advertisement.sptr_type_9, size_of_opaque_lsa);										if (type_9_lsa_head == NULL)											{											type_9_lsa_head = type_9_lsa;											}										else											{											ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) type_9_lsa, (OSPF_GENERIC_NODE *) type_9_lsa_head);											}										}									}								}							else if (key == OSPF_SEARCH_LSA_ID)								{								if (sptr_database_entry->advertisement.sptr_type_9->ls_header.id.lsid == key_value)									{									size_of_opaque_lsa = sptr_database_entry->advertisement.sptr_type_9->ls_header.length;									size_of_opaque_lsa = net_to_host_short(size_of_opaque_lsa);									/* Add forward and backward pointer length */									size_of_type_9_lsa = (USHORT)(size_of_opaque_lsa + size_of_link_list_pointers);									type_9_lsa = table_malloc(1, size_of_type_9_lsa);									if (type_9_lsa == NULL)										{										if (type_9_lsa_head != NULL)											{											ospf_free_entire_list ((OSPF_GENERIC_NODE*) type_9_lsa_head);											}										type_9_lsa_head = NULL;										semGive (ospf_global_mutex );										return NULL;										}									else										{										memcpy(((BYTE *)(type_9_lsa)+size_of_link_list_pointers), sptr_database_entry->advertisement.sptr_type_9, size_of_opaque_lsa);										if (type_9_lsa_head == NULL)											{											type_9_lsa_head = type_9_lsa;											}										else											{											ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) type_9_lsa, (OSPF_GENERIC_NODE *) type_9_lsa_head);											}										}									}								}							else								{								size_of_opaque_lsa = sptr_database_entry->advertisement.sptr_type_9->ls_header.length;								size_of_opaque_lsa = net_to_host_short(size_of_opaque_lsa);								/* Add forward and backward pointer length */								size_of_type_9_lsa = (USHORT)(size_of_opaque_lsa + size_of_link_list_pointers);								type_9_lsa = table_malloc(1, size_of_type_9_lsa);								if (type_9_lsa == NULL)									{									if (type_9_lsa_head != NULL)										{										ospf_free_entire_list ((OSPF_GENERIC_NODE*) type_9_lsa_head);										}									type_9_lsa_head = NULL;									semGive (ospf_global_mutex );									return NULL;									}								else									{									memcpy(((BYTE *)(type_9_lsa)+size_of_link_list_pointers), sptr_database_entry->advertisement.sptr_type_9, size_of_opaque_lsa);									if (type_9_lsa_head == NULL)										{										type_9_lsa_head = type_9_lsa;										}									else										{										ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) type_9_lsa, (OSPF_GENERIC_NODE *) type_9_lsa_head);										}									}								}							}						}					}				}			sptr_area = sptr_area->sptr_forward_link;			}		semGive (ospf_global_mutex );		return type_9_lsa_head;		}	else		{		semGive (ospf_global_mutex );		return NULL;		}    }/***********************************************************************************************************************************//*	Function: ospfRetrieveType10	Input: enum OSPF_SEARCH_TYPE - OSPF_SEARCH_LSA_TYPE|OSPF_SEARCH_LSA_ID|OSPF_SEARCH_ADVERTISING_ROUTER		   ULONG - key_value		   ULONG - area_id	RETURNS: OSPF_TYPE_10_LSA_LINK * - link list of type 10 link state advertisements	Description: This function retrieves the type 10 opaque lsas from the opaque lsdb.*/OSPF_TYPE_10_LSA_LINK *ospfRetrieveType10    (    enum OSPF_SEARCH_TYPE key,     ULONG key_value,     ULONG area_id    )    {	OSPF_AREA_ENTRY *sptr_area = ospf.sptr_area_list;	OSPF_LS_DATABASE_HEAD *sptr_ls_database_head = NULL;	OSPF_LS_DATABASE_ENTRY *sptr_database_entry = NULL;	OSPF_LS_DATABASE_ENTRY *sptr_next_database_entry = NULL;    ULONG index;	OSPF_TYPE_10_LSA_LINK *type_10_lsa_head = NULL;	OSPF_TYPE_10_LSA_LINK *type_10_lsa = NULL;	USHORT size_of_opaque_lsa = 0;	USHORT size_of_type_10_lsa = 0;	USHORT size_of_link_list_pointers = 0;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospfRetrieveType10\r\n");	key_value = net_to_host_long(key_value);	semTake (ospf_global_mutex , WAIT_FOREVER);	    if (ospf.opaque_capability == TRUE)		{		size_of_link_list_pointers = sizeof(OSPF_TYPE_10_LSA_LINK *) + sizeof(OSPF_TYPE_10_LSA_LINK *);		while (sptr_area != NULL)			{			if (sptr_area->area_id == area_id)				{				for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[TYPE_10_LSA][index]);	/* for each hash list */					index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[TYPE_10_LSA][index]))					{					/* 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;												if ( sptr_database_entry->advertisement.sptr_type_10 != NULL )							{							if (key == OSPF_SEARCH_ADVERTISING_ROUTER)								{								if (sptr_database_entry->advertisement.sptr_type_10->ls_header.advertising_router == key_value)									{									size_of_opaque_lsa = sptr_database_entry->advertisement.sptr_type_10->ls_header.length;									size_of_opaque_lsa = net_to_host_short(size_of_opaque_lsa);									/* Add forward and backward pointer length */									size_of_type_10_lsa = (USHORT)(size_of_opaque_lsa + size_of_link_list_pointers);									type_10_lsa = table_malloc(1, size_of_type_10_lsa);									if (type_10_lsa == NULL)										{										if (type_10_lsa_head != NULL)											{											ospf_free_entire_list ((OSPF_GENERIC_NODE*) type_10_lsa_head);											}										type_10_lsa_head = NULL;										semGive (ospf_global_mutex );										return NULL;										}									else										{										memcpy(((BYTE *)(type_10_lsa)+size_of_link_list_pointers), sptr_database_entry->advertisement.sptr_type_10, size_of_opaque_lsa);										if (type_10_lsa_head == NULL)											{											type_10_lsa_head = type_10_lsa;											}										else											{											ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) type_10_lsa, (OSPF_GENERIC_NODE *) type_10_lsa_head);											}										}									}								}							else if (key == OSPF_SEARCH_LSA_ID)								{								if (sptr_database_entry->advertisement.sptr_type_10->ls_header.id.lsid == key_value)									{									size_of_opaque_lsa = sptr_database_entry->advertisement.sptr_type_10->ls_header.length;									size_of_opaque_lsa = net_to_host_short(size_of_opaque_lsa);									/* Add forward and backward pointer length */									size_of_type_10_lsa = (USHORT)(size_of_opaque_lsa + size_of_link_list_pointers);									type_10_lsa = table_malloc(1, size_of_type_10_lsa);									if (type_10_lsa == NULL)										{										if (type_10_lsa_head != NULL)											{											ospf_free_entire_list ((OSPF_GENERIC_NODE*) type_10_lsa_head);											}										type_10_lsa_head = NULL;										semGive (ospf_global_mutex );										return NULL;										}									else										{										memcpy(((BYTE *)(type_10_lsa)+size_of_link_list_pointers), sptr_database_entry->advertisement.sptr_type_10, size_of_opaque_lsa);										if (type_10_lsa_head == NULL)											{											type_10_lsa_head = type_10_lsa;											}										else											{											ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) type_10_lsa, (OSPF_GENERIC_NODE *) type_10_lsa_head);											}										}									}								}							else								{								size_of_opaque_lsa = sptr_database_entry->advertisement.sptr_type_10->ls_header.length;								size_of_opaque_lsa = net_to_host_short(size_of_opaque_lsa);								/* Add forward and backward pointer length */								size_of_type_10_lsa = (USHORT)(size_of_opaque_lsa + size_of_link_list_pointers);								type_10_lsa = table_malloc(1, size_of_type_10_lsa);								if (type_10_lsa == NULL)									{									if (type_10_lsa_head != NULL)										{										ospf_free_entire_list ((OSPF_GENERIC_NODE*) type_10_lsa_head);										}									type_10_lsa_head = NULL;

⌨️ 快捷键说明

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