📄 ospf_list_utilities.c
字号:
--sptr_neighbor->retransmit_queue_count; } sptr_neighbor->sptr_retransmit = NULL; return;}/***********************************************************************************************************************************/void ospf_free_neighbor_database_summary_list (OSPF_NEIGHBOR *sptr_neighbor){ OSPF_LS_DATABASE_SUMMARY *sptr_database_summary_node_to_free; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_neighbor_database_summary_list\r\n"); if ( sptr_neighbor == NULL ) return; if (sptr_neighbor->sptr_database_summary != NULL) { for (sptr_database_summary_node_to_free = sptr_neighbor->sptr_database_summary; sptr_database_summary_node_to_free != NULL; sptr_database_summary_node_to_free = sptr_neighbor->sptr_database_summary) { sptr_neighbor->sptr_database_summary = sptr_neighbor->sptr_database_summary->sptr_forward_link; ospf_free_ls_database_summary (sptr_database_summary_node_to_free); } sptr_neighbor->sptr_database_summary = NULL; } sptr_neighbor->database_summary_queue_count = 0x0000; return;}/**********************************************************************************************************************************/OSPF_LS_REQUEST *ospf_find_advertisement_on_neighbors_ls_request_list (OSPF_NEIGHBOR *sptr_neighbor,OSPF_LS_DATABASE_ENTRY *sptr_advertisement){ OSPF_LS_REQUEST *sptr_ls_request_node; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_find_advertisement_on_neighbors_ls_request_list\r\n"); for (sptr_ls_request_node = sptr_neighbor->sptr_ls_request[sptr_advertisement->advertisement.sptr_router->ls_header.type]; sptr_ls_request_node != NULL; sptr_ls_request_node = sptr_ls_request_node->sptr_forward_link) { if (sptr_ls_request_node->advertising_router == sptr_advertisement->advertisement.sptr_router->ls_header.advertising_router) { /* SPR#89187 */ if (sptr_ls_request_node->id == sptr_advertisement->advertisement.sptr_router->ls_header.id) { return (sptr_ls_request_node); } } } return (NULL); /* not found */}/***********************************************************************************************************************************/void ospf_free_neighbor_ls_request_list (OSPF_NEIGHBOR *sptr_neighbor){ enum OSPF_LS_TYPE type; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_neighbor_ls_request_list\r\n"); if ( sptr_neighbor == NULL ) return;#if defined (__OPAQUE_LSA__) for (type = OSPF_LS_ROUTER; type <= OSPF_LS_TYPE_11; ++type) /* for each type of advertisement */#else /* __OPAQUE_LSA__ */#if !defined (__NSSA__) for (type = OSPF_LS_ROUTER; type <= OSPF_LS_AS_EXTERNAL; ++type) /* for each type of advertisement */#else for (type = OSPF_LS_ROUTER; type <= OSPF_LS_TYPE_7; ++type) /* for each type of advertisement */#endif /*__NSSA__*/#endif /* __OPAQUE_LSA__ */ {#if defined (__NSSA__) if (type == OSPF_LS_MULTICAST ) continue;#endif /*__NSSA__*/ if (sptr_neighbor->sptr_ls_request[type] != NULL) { sptr_neighbor->sptr_ls_request[type] = (OSPF_LS_REQUEST *) ospf_free_entire_list ((OSPF_GENERIC_NODE *) sptr_neighbor->sptr_ls_request[type]); } } sptr_neighbor->ls_request_queue_count = 0x0000; sptr_neighbor->ls_request_list_has_changed = TRUE; return;}/***********************************************************************************************************************************/void ospf_free_interface_acknowledgement_list (OSPF_INTERFACE *sptr_interface,enum BOOLEAN check_number_of_neighbors_in_init_state){ OSPF_LS_HEADER_QUEUE *sptr_acknowledgement; OSPF_LS_HEADER_QUEUE *sptr_next; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_interface_acknowledgement_list\r\n"); if ( sptr_interface == NULL ) return; if (check_number_of_neighbors_in_init_state == TRUE) { if (sptr_interface->number_of_neighbors_in_init_state != 0x01) { return; } } for (sptr_acknowledgement = sptr_interface->sptr_head_of_delayed_acknowledgement_list; sptr_acknowledgement != NULL; sptr_acknowledgement = sptr_next) { sptr_next = sptr_acknowledgement->sptr_forward_link; table_free ((void *) sptr_acknowledgement); sptr_acknowledgement = NULL; } sptr_interface->sptr_head_of_delayed_acknowledgement_list = NULL; sptr_interface->number_of_acknowledgements_on_delayed_acknowledgement_list = 0x00000000L; sptr_interface->delayed_acknowledgement_timer_enabled = FALSE; return;}/********************************************************************************************************************************/void ospf_free_ospf_classes_area_lists (void){ OSPF_AREA_ENTRY *sptr_area; OSPF_AREA_ENTRY *sptr_next_area; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_ospf_classes_area_lists\r\n"); /* Free stub areas */ if (ospf.sptr_stub_area_list != NULL) { ospf_free_entire_list ((OSPF_GENERIC_NODE*) ospf.sptr_stub_area_list); } /* Free all the areas */ for ( sptr_area = ospf.sptr_area_list; sptr_area != NULL; sptr_area = sptr_next_area) { sptr_next_area = sptr_area->sptr_forward_link; ospf_free_all_the_associated_area_pointers (sptr_area); /* SPR#76812 */ semTake (ospf_config_mutex, WAIT_FOREVER); ospf_remove_node_from_list ( (OSPF_GENERIC_NODE **) &(ospf.sptr_area_list), (OSPF_GENERIC_NODE*) sptr_area); semGive (ospf_config_mutex); table_free ((void*) sptr_area); sptr_area = NULL; }}/********************************************************************************************************************************/void ospf_free_all_the_associated_area_pointers (OSPF_AREA_ENTRY* sptr_area){ OSPF_ADDRESS_RANGE_LIST_ENTRY *sptr_address_ranges; OSPF_ADDRESS_RANGE_LIST_ENTRY *sptr_next_address_ranges; OSPF_ADVERTISEMENT_NODE *sptr_summary_advertisement_list; OSPF_ADVERTISEMENT_NODE *sptr_next_summary_advertisement_list; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_all_the_associated_area_pointers\r\n"); /* Free area's address_ranges */ if (sptr_area->sptr_address_ranges != NULL) { for (sptr_address_ranges = sptr_area->sptr_address_ranges; sptr_address_ranges != NULL; sptr_address_ranges = sptr_next_address_ranges) { sptr_next_address_ranges = sptr_address_ranges->sptr_forward_link; ospf_remove_node_from_list ( (OSPF_GENERIC_NODE **) &sptr_area->sptr_address_ranges, (OSPF_GENERIC_NODE*) sptr_address_ranges); /* Free this address_range's discarded route list */ ospf_free_routing_table_nodes (sptr_address_ranges->sptr_discard_entries); table_free ((void*) sptr_address_ranges); sptr_address_ranges = NULL; } sptr_area->sptr_address_ranges = NULL; } /* Free area's summary_advertisements */ for (sptr_summary_advertisement_list = sptr_area->sptr_summary_advertisement_list_head; sptr_summary_advertisement_list != NULL; sptr_summary_advertisement_list = sptr_next_summary_advertisement_list ) { sptr_next_summary_advertisement_list = sptr_summary_advertisement_list->sptr_forward_link; ospf_remove_node_from_list ( (OSPF_GENERIC_NODE **) &sptr_area->sptr_summary_advertisement_list_head, (OSPF_GENERIC_NODE*) sptr_summary_advertisement_list); table_free ((void*) sptr_summary_advertisement_list ); sptr_summary_advertisement_list = NULL; } sptr_area->sptr_summary_advertisement_list_head = NULL; /* Free area's shortest_path tree, Read the comments in the called function to findout why it's called twice */ if (sptr_area->shortest_path_first_tree.sptr_forward_link != NULL) { ospf_free_areas_shortest_path_tree_nodes (sptr_area->shortest_path_first_tree.sptr_forward_link); /* free associated next_hops */ if (sptr_area->shortest_path_first_tree.sptr_next_hop != NULL) { ospf_free_entire_list ((OSPF_GENERIC_NODE*) sptr_area->shortest_path_first_tree.sptr_next_hop); } sptr_area->shortest_path_first_tree.sptr_forward_link = NULL; sptr_area->shortest_path_first_tree.sptr_backward_link = NULL; sptr_area->shortest_path_first_tree.sptr_next_hop = NULL; } if (sptr_area->sptr_candidate != NULL) { ospf_free_areas_shortest_path_tree_nodes ( sptr_area->sptr_candidate); } sptr_area->sptr_candidate = NULL; ospf_free_areas_link_state_database (sptr_area); return;}/********************************************************************************************************************************/void ospf_free_routing_table_nodes (OSPF_ROUTING_TABLE_NODE *sptr_first_discarded_or_valid_routing_table_node){ OSPF_ROUTING_TABLE_NODE *sptr_discarded_routing_table_node; OSPF_ROUTING_TABLE_NODE *sptr_next_discarded_routing_table_node; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_routing_table_nodes\r\n"); for (sptr_discarded_routing_table_node = sptr_first_discarded_or_valid_routing_table_node; sptr_discarded_routing_table_node != NULL; sptr_discarded_routing_table_node = sptr_next_discarded_routing_table_node) { sptr_next_discarded_routing_table_node = sptr_discarded_routing_table_node->sptr_forward_link; ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_first_discarded_or_valid_routing_table_node), (OSPF_GENERIC_NODE*) sptr_discarded_routing_table_node); if (sptr_discarded_routing_table_node->sptr_routing_table_entry->sptr_next_hop != NULL) { ospf_free_entire_list ((OSPF_GENERIC_NODE*) sptr_discarded_routing_table_node->sptr_routing_table_entry->sptr_next_hop); } if (sptr_discarded_routing_table_node->sptr_routing_table_entry != NULL) { table_free ((void*) sptr_discarded_routing_table_node->sptr_routing_table_entry ); sptr_discarded_routing_table_node->sptr_routing_table_entry = NULL; } table_free ((void*) sptr_discarded_routing_table_node); sptr_discarded_routing_table_node = NULL; } return;}/********************************************************************************************************************************/void ospf_free_areas_shortest_path_tree_nodes (OSPF_SHORTEST_PATH_NODE* sptr_first_shortest_path_candidate){ OSPF_SHORTEST_PATH_NODE *sptr_shortest_path_candidate; OSPF_SHORTEST_PATH_NODE *sptr_next_shortest_path_candidate; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_areas_shortest_path_tree_nodes\r\n"); for (sptr_shortest_path_candidate = sptr_first_shortest_path_candidate; sptr_shortest_path_candidate != NULL; sptr_shortest_path_candidate = sptr_next_shortest_path_candidate ) { sptr_next_shortest_path_candidate = sptr_shortest_path_candidate->sptr_forward_link; ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_first_shortest_path_candidate), (OSPF_GENERIC_NODE*) sptr_shortest_path_candidate ); /* free associated next_hops */ if ((sptr_shortest_path_candidate != NULL) && (sptr_shortest_path_candidate->sptr_next_hop != NULL)) { ospf_free_entire_list ((OSPF_GENERIC_NODE*) sptr_shortest_path_candidate->sptr_next_hop); } table_free ((void*) sptr_shortest_path_candidate ); sptr_shortest_path_candidate = NULL; } return;}/********************************************************************************************************************************/void ospf_free_areas_link_state_database (OSPF_AREA_ENTRY *sptr_area){ BYTE ls_type; ULONG index; OSPF_LS_DATABASE_HEAD *sptr_ls_database_head; OSPF_LS_DATABASE_ENTRY *sptr_database_entry; OSPF_LS_DATABASE_ENTRY *sptr_next_database_entry = NULL; OSPF_INTERFACE *sptr_interface = NULL; OSPF_INTERFACE *sptr_next_interface = NULL; OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_areas_link_state_database\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__*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -