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

📄 macbrdb.c

📁 以太网交换机协议平台stp协议的设计与实现源代码。
💻 C
📖 第 1 页 / 共 2 页
字号:
	add_entry_to_filtering_database (swap (0x0003),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x0004),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x0005),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x0006),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x0007),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x0008),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x0009),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x000A),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x000B),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x000C),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x000D),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x000E),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	add_entry_to_filtering_database (swap (0x000F),bridge_group_address._ulong,0x0000,PERMANENT_TABLE_ENTRY);
	
	for (spanning_tree_port_number = 0x0000; spanning_tree_port_number < stp_class.number_of_spanning_tree_ports;
		++spanning_tree_port_number)
		{
		lsl_control (GET_MAC_ADDRESS,spanning_tree_port_number,stp_class.stack_id,&mac_address);

		add_entry_to_filtering_database (mac_address._ushort,mac_address._ulong,spanning_tree_port_number,PERMANENT_TABLE_ENTRY);
		}
}
/****************************************************************************/
enum SORT_RETURN compare_node_addresses (FILTERING_DATABASE_ENTRY *sptr_fd_entry_1,FILTERING_DATABASE_ENTRY *sptr_fd_entry_2)
{
	BYTE	node_address_size;

	BYTE	*bptr_node_address_1 = (BYTE *) &sptr_fd_entry_1->source_address._ushort;
	BYTE	*bptr_node_address_2 = (BYTE *) &sptr_fd_entry_2->source_address._ushort;

	for (node_address_size = 0x00; node_address_size < sizeof (MAC_ADDRESS) ; node_address_size += (BYTE) 1)
		{
		if (*bptr_node_address_1 > *bptr_node_address_2)
			return (GREATER_THAN);
		if (*bptr_node_address_1 < *bptr_node_address_2)
			return (LESS_THAN);

		++bptr_node_address_1;
		++bptr_node_address_2;
		}

	return (EQUAL_TO);
}
#if !defined (SMALL_ENTRY)
/*************************************************************************/
void add_entry_to_queue (LINK *sptr_link,LINK *sptr_link_to_add)
{
	sptr_link_to_add->sptr_backward_link = sptr_link->sptr_backward_link;

	if (sptr_link->sptr_backward_link != NULL)
		sptr_link->sptr_backward_link->sptr_forward_link = sptr_link_to_add;
	else
		sptr_link->sptr_forward_link = sptr_link_to_add;
	
	sptr_link->sptr_backward_link = sptr_link_to_add;

	sptr_link_to_add->sptr_forward_link = NULL;
}
/*************************************************************************/
void  *get_entry_from_queue (LINK *sptr_link)
{
	LINK	*sptr_return_link;

	sptr_return_link = sptr_link->sptr_forward_link;

	if (sptr_return_link != NULL)
		{
		sptr_link->sptr_forward_link = sptr_link->sptr_forward_link->sptr_forward_link;

		if (sptr_link->sptr_forward_link != NULL)
			sptr_link->sptr_forward_link->sptr_backward_link = NULL;
		else 
			sptr_link->sptr_backward_link = NULL;

		if (sptr_return_link != NULL)
			{
			sptr_return_link->sptr_forward_link = NULL;
			sptr_return_link->sptr_backward_link = NULL;
			}
		}

	return (sptr_return_link);
}
/*************************************************************************/
void delete_entry_from_queue (LINK *sptr_queue_link,LINK *sptr_link_to_delete)
{
	if (sptr_link_to_delete->sptr_forward_link == NULL && sptr_link_to_delete->sptr_backward_link == NULL) /* 1 entry in queue */
		{
		sptr_queue_link->sptr_forward_link = NULL;
		sptr_queue_link->sptr_backward_link = NULL;
		return;
		}

	if (sptr_link_to_delete->sptr_backward_link == NULL) /* First entry in N (N >= 2) entry queue  */
		sptr_queue_link->sptr_forward_link = sptr_link_to_delete->sptr_forward_link; /* new first entry in queue have queue point to it */
	else 
		sptr_link_to_delete->sptr_backward_link->sptr_forward_link = sptr_link_to_delete->sptr_forward_link;

	if (sptr_link_to_delete->sptr_forward_link == NULL) /* Last entry in N (N >= 2) entry queue */
		sptr_queue_link->sptr_backward_link = sptr_link_to_delete->sptr_backward_link; /* new last entry in queue because we're deleting the end*/
	else 
		sptr_link_to_delete->sptr_forward_link->sptr_backward_link = sptr_link_to_delete->sptr_backward_link;

	sptr_link_to_delete->sptr_forward_link = NULL;
	sptr_link_to_delete->sptr_backward_link = NULL;
}
#else
USHORT convert_link_to_index (USHORT_LINK *sptr_link);
USHORT_LINK *convert_index_to_link (USHORT index);
/*************************************************************************/
void add_entry_to_queue (USHORT_LINK *sptr_link,USHORT_LINK *sptr_link_to_add)
{
	USHORT_LINK *sptr_previous_entry;

	sptr_link_to_add->previous_entry_index = sptr_link->previous_entry_index;

	if (sptr_link->previous_entry_index != NULL_USHORT_ENTRY)
		{
		sptr_previous_entry = convert_index_to_link (sptr_link->previous_entry_index);

		sptr_previous_entry->next_entry_index = convert_link_to_index (sptr_link_to_add);
		}
	else
		sptr_link->next_entry_index = convert_link_to_index (sptr_link_to_add);
	
	sptr_link->previous_entry_index = convert_link_to_index (sptr_link_to_add);

	sptr_link_to_add->next_entry_index = NULL_USHORT_ENTRY;
}
/*************************************************************************/
void *get_entry_from_queue (USHORT_LINK *sptr_link)
{
	USHORT_LINK	*sptr_return_link;
	USHORT_LINK	*sptr_next_link;

	sptr_return_link = convert_index_to_link (sptr_link->next_entry_index);

	if (sptr_return_link != NULL)
		{
		sptr_next_link = convert_index_to_link (sptr_link->next_entry_index);

		sptr_link->next_entry_index = sptr_next_link->next_entry_index;

		if (sptr_link->next_entry_index != NULL_USHORT_ENTRY)
			{
			sptr_next_link = convert_index_to_link (sptr_link->next_entry_index);
			sptr_next_link->previous_entry_index = NULL_USHORT_ENTRY;
			}
		else 
			sptr_link->previous_entry_index = NULL_USHORT_ENTRY;

		if (sptr_return_link != NULL)
			{
			sptr_return_link->next_entry_index = NULL_USHORT_ENTRY;
			sptr_return_link->previous_entry_index = NULL_USHORT_ENTRY;
			}
		}

	return (sptr_return_link);
}
/*************************************************************************/
void delete_entry_from_queue (USHORT_LINK *sptr_queue_link,USHORT_LINK *sptr_link_to_delete)
{
	USHORT_LINK	*sptr_previous_link;
	USHORT_LINK	*sptr_next_link;

	if (sptr_link_to_delete->next_entry_index == NULL_USHORT_ENTRY &&
		sptr_link_to_delete->previous_entry_index == NULL_USHORT_ENTRY) /* 1 entry in queue */
		{
		sptr_queue_link->next_entry_index = NULL_USHORT_ENTRY;
		sptr_queue_link->previous_entry_index = NULL_USHORT_ENTRY;
		return;
		}

	if (sptr_link_to_delete->previous_entry_index == NULL_USHORT_ENTRY) /* First entry in N (N >= 2) entry queue  */
		sptr_queue_link->next_entry_index = sptr_link_to_delete->next_entry_index; /* new first entry in queue have queue point to it */
	else
		{
		sptr_previous_link = convert_index_to_link (sptr_link_to_delete->previous_entry_index);
		sptr_previous_link->next_entry_index = sptr_link_to_delete->next_entry_index;
		}

	if (sptr_link_to_delete->next_entry_index == NULL_USHORT_ENTRY) /* Last entry in N (N >= 2) entry queue */
		sptr_queue_link->previous_entry_index = sptr_link_to_delete->previous_entry_index; /* new last entry in queue because we're deleting the end*/
	else
		{
		sptr_next_link = convert_index_to_link (sptr_link_to_delete->next_entry_index);

		sptr_next_link->previous_entry_index = sptr_link_to_delete->previous_entry_index;
		}

	sptr_link_to_delete->next_entry_index = NULL_USHORT_ENTRY;
	sptr_link_to_delete->previous_entry_index = NULL_USHORT_ENTRY;
}
/*************************************************************************/
USHORT_LINK *convert_index_to_link (USHORT index)
{
	return (&stp_class.sptr_fd_table->entry[index].links);
}
/*************************************************************************/
USHORT convert_link_to_index (USHORT_LINK *sptr_link)
{
	USHORT return_index;

	return_index = (USHORT) ((BYTE *) sptr_link - (BYTE *) &stp_class.sptr_fd_table->entry[0].links);
	return_index = return_index /sizeof (FILTERING_DATABASE_ENTRY);

	return (return_index);
}

#endif

⌨️ 快捷键说明

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