📄 macbrdb.c
字号:
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 + -