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

📄 ospf_list_utilities.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 4 页
字号:
/* ospf_list_utilities.c - ospf list utilities *//* Copyright 2000-2003 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------02o,17jul03,agi    made ospf_delete_entry_from_list() global02n,03jul03,agi    Fixed SPR#89187 - OSPF stack in exchange start problem02m,29may03,agi    Added ospf_add_entry_to_list(), ospf_delete_entry_from_list()02l,23may03,agi    Changed RWOS semaphores to vxWorks semaphores02k,22apr03,ram	   SPR#76812 Modifications for OSPF performance enhancements02j,19nov02,mwv    Merge TMS code SPR 8428402i,10oct02,hme    Fix TSR# 28703702h,19apr02,jkw    Fix memory leak for external lsas.02g,16apr02,jkw    One copy of external and type 11 lsa02f,04apr02,kc     Fixed ospf_free_all_the_associated_area_pointers() - set                   sptr_address_range for area to NULL. Also fixed                   ospf_free_areas_link_state_database() - set                   sptr_database_entry pointer for lsdb head to NULL.02e,09apr02,jkw    Sequence number wrap.02d,25mar02,kc     Fixed ospf_free_all_the_associated_area_pointers() again -                    explicitly set the forward pointer for the                   shortest_path_first_tree to NULL after freeing the memory                   pointed to by the given pointer.02c,23mar02,kc     Fixed ospf_free_all_the_associated_area_pointers() - explicitly set                    the pointer pointed to the sptr_candidate and                   sptr_summary_advertisement_list_head to NULL after freeing the                    memory pointed to by the given pointer.02b,09jan02,jkw    Add null pointer check for removing advertisement from retransmission                    list.02a,20dec01,jkw    Removed sptr_area->sptr_interfaces structure.01z,13oct01,kc     Dynamic configuration changes.01y,26sep01,kc     Modified ospf_free_areas_interfaces() to de-register multicast and                   to send empty hello to neighbors.01x,03sep01,jkw    Added Mistral updates for NULL pointer fix01w,23aug01,jkw    Fixed compiler warnings.01v,18jul01,jkw    Added opaque lsa request for ospf_free_neighbor_ls_request_list01u,19june01,aos   Calling to ospf_clean_up_retransmit_lists_affiliated_with_this_advertisement () function before freeing the LS database entry.01t,03may01,jkw    Added checks for NULL pointers and alarm messages01s,26sep00,reshma Added WindRiver CopyRight01r,25sep00,reshma RFC-1587 implementation for OSPF NSSA Option, also tested against ANVL.                   Also added ospf_mib_delete_xxx_entry functions.01q,07jul00,reshma Unix compatibility related changes.01p,04apr00,reshma Added some MIB support (Read only).Passed all important ANVL OSPF tests.01o,23dec99,reshma Compatibility with VxWorks-IP and VxWorks RTM-interface01n,28dec98,jack   Compiled and added some comments01m,11nov98,jack   Config changes, linted and big endian changes01l,30oct98,jack   Incorporate changes for compilation on Vxworks01k,23aug98,jack   ANVL tested OSPF with PATRICIA tree route table and no recursion01j,10aug98,jack   PATRICIA Route Table Based OSPF Code Base01i,19jun98,jack   listroutine changes. OSPF add and delete list routines, eventually call                   the rwutils list routines.01h,16jun98,jack   The ospf_add_to_list routine changed.01g,05jun98,jack   Fix in fn ospf_remove_current_database_copy_from_all_neigh_.....; NULL                   pointer check01f,04jun98,jack   Integration with RTM and BGP01e,24apr98,jack   RTM changes01d,10jul97,cindy  Pre-release v1.52b01c,02oct97,cindy  Release Version 1.5201b,22oct96,cindy  Release Version 1.5001a,05jun96,cindy  First Beta Release*//*DESCRIPTIONospf_list_utilities.c is used for creating and deleting lists.  These lists include: neighbor lists, neighbor retransmission lists, neighbor retransmit queues, database summary lists, area lists.This file is used for retrieving link state advertisements.This file is used when creating and deleting lists.*/#include "ospf.h"#if defined (__OSPF_VIRTUAL_STACK__)#include "ospf_vs_lib.h"#endif /* __OSPF_VIRTUAL_STACK__ */static void ospf_neighbors_remove_all_advertisement_from_transmit_list (OSPF_NEIGHBOR *sptr_neighbor, OSPF_LS_DATABASE_ENTRY *sptr_advertisement);/******************************************************************************/void ospf_insert_node_in_list (OSPF_GENERIC_NODE *sptr_node,OSPF_GENERIC_NODE *sptr_previous_node){	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_insert_node_in_list\r\n");	/*	 * This fn is always called from add_node_to_end at this point in time so comment out if condition	 */	sptr_node->sptr_backward_link = sptr_previous_node;	sptr_node->sptr_forward_link = NULL;  /* always added at end */	sptr_previous_node->sptr_forward_link = sptr_node;	return;}/*************************************************************************/void ospf_add_entry_to_list (LINK *sptr_link, LINK *sptr_link_to_add){        if (sptr_link == NULL)                {                printf ("LSL: Illegal List\r\n");                return;                }        if (sptr_link_to_add == NULL)                {                printf ("LSL: Illegal Element to Add\r\n");                return;                }        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 ospf_delete_entry_from_list     (    LINK *sptr_list_link,     LINK *sptr_link_to_delete    )    {        if (sptr_list_link == NULL)                {                printf ("LSL: Illegal List\r\n");                return;                }        if (sptr_link_to_delete == NULL)                {                printf ("LSL: Illegal Element to Delete\r\n");                return;                }        if (sptr_link_to_delete->sptr_forward_link == NULL && sptr_link_to_delete->sptr_backward_link == NULL) /* 1 entry in list */                {                sptr_list_link->sptr_forward_link = NULL;                sptr_list_link->sptr_backward_link = NULL;                return;                }        if (sptr_link_to_delete->sptr_backward_link == NULL) /* First entry in N (N >= 2) entry list  */                sptr_list_link->sptr_forward_link = sptr_link_to_delete->sptr_forward_link; /* new first entry in list have list 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 list */                sptr_list_link->sptr_backward_link = sptr_link_to_delete->sptr_backward_link; /* new last entry in list 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;    }/******************************************************************************/void ospf_add_node_to_end_of_list (OSPF_GENERIC_NODE *sptr_node,OSPF_GENERIC_NODE *sptr_first_node_in_list){	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_add_node_to_end_of_list\r\n");	if (sptr_first_node_in_list->sptr_forward_link == NULL)		{		sptr_first_node_in_list->sptr_forward_link = sptr_node;		sptr_first_node_in_list->sptr_backward_link = sptr_node;		sptr_node->sptr_backward_link = sptr_first_node_in_list;		sptr_node->sptr_forward_link = NULL;		return;		}	ospf_add_entry_to_list ((LINK *) sptr_first_node_in_list, (LINK *) sptr_node);	return;}/******************************************************************************/OSPF_GENERIC_NODE *ospf_free_entire_list (OSPF_GENERIC_NODE *sptr_first_node_in_list){	OSPF_GENERIC_NODE *sptr_node;	OSPF_GENERIC_NODE *sptr_next_node;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_free_entire_list\r\n");	for (sptr_node = sptr_first_node_in_list; sptr_node != NULL; sptr_node = sptr_next_node)		{		sptr_next_node = sptr_node->sptr_forward_link;		ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &sptr_first_node_in_list, sptr_node);		table_free ((void *) sptr_node);		sptr_node = NULL;		}	return (NULL);}/******************************************************************************/void ospf_remove_node_from_list (OSPF_GENERIC_NODE **ptr_sptr_first_node, OSPF_GENERIC_NODE *sptr_node){    OSPF_GENERIC_NODE *sptr_previous_node;    OSPF_GENERIC_NODE *sptr_next_node;    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_remove_node_from_list\r\n");    sptr_previous_node = NULL;    sptr_next_node = NULL;    if ( (*ptr_sptr_first_node == NULL) || (sptr_node == NULL) )        return;    if (*ptr_sptr_first_node == sptr_node)        {        if (sptr_node->sptr_forward_link != NULL)            {            *ptr_sptr_first_node = sptr_node->sptr_forward_link;			/* Mistral Added on July 25th */	  		if(*ptr_sptr_first_node)                 {                (*ptr_sptr_first_node)->sptr_backward_link =                     sptr_node->sptr_backward_link;                }            }        else            {            *ptr_sptr_first_node = NULL;            }        sptr_node->sptr_forward_link = NULL;        sptr_node->sptr_backward_link = NULL;        return;        }    if ( *ptr_sptr_first_node != NULL )        {        ospf_delete_entry_from_list             ((LINK *) *ptr_sptr_first_node, (LINK *) sptr_node);        }    return;    }/******************************************************************************/void ospf_add_neighbor (OSPF_INTERFACE *sptr_interface,OSPF_NEIGHBOR *sptr_neighbor_to_add){	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_add_neighbor\r\n");    /* SPR#76812 */    semTake (ospf_config_mutex, WAIT_FOREVER);	if (sptr_interface->sptr_neighbor == NULL)		{		sptr_interface->sptr_neighbor = sptr_neighbor_to_add;		}	else		{		ospf_add_node_to_end_of_list ((OSPF_GENERIC_NODE *) sptr_neighbor_to_add, (OSPF_GENERIC_NODE *) sptr_interface->sptr_neighbor);		}	++ospf.number_of_neighbors;    semGive (ospf_config_mutex);	if (sptr_neighbor_to_add->sptr_interface->type == OSPF_VIRTUAL_LINK)		{        /* REVISIT(patch): obtained the proper transit area id */        sptr_neighbor_to_add->mib_area_id = sptr_neighbor_to_add->sptr_interface->sptr_transit_area->area_id;#if defined(__OSPF_MIB__)		/* tell MIB API to add this virtual neighbor to ospfVirtNbrTable */		ospf2Mapi_request( (void *)sptr_neighbor_to_add, ospfVirtNbrUpdateReqType );#endif /*__OSPF_MIB__*/		}	else		{#if defined(__OSPF_MIB__)		/* tell MIB API to add this virtual neighbor to ospfVirtNbrTable */		ospf2Mapi_request( (void *)sptr_neighbor_to_add, ospfNbrUpdateReqType );#endif /*__OSPF_MIB__*/		}	return;}/******************************************************************************/OSPF_LS_DATABASE_NODE *ospf_find_advertisement_on_neighbors_retransmit_list (OSPF_NEIGHBOR *sptr_neighbor,OSPF_LS_DATABASE_ENTRY *sptr_advertisement){	OSPF_LS_DATABASE_NODE *sptr_retransmission_node;	USHORT old_age;	USHORT length;	int result;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_find_advertisement_on_neighbors_retransmit_list\r\n");	for (sptr_retransmission_node = sptr_neighbor->sptr_retransmit; sptr_retransmission_node != NULL;		sptr_retransmission_node = sptr_retransmission_node->sptr_forward_link)		{		old_age = sptr_retransmission_node->sptr_ls_database_entry->advertisement.sptr_router->ls_header.age;

⌨️ 快捷键说明

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