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

📄 ospf_timer.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 4 页
字号:
                test_return_type = ospf_check_if_advertisements_link_state_id_is_equal_to_one_of_the_routers_own_IP_interface_addresses (                        sptr_database_entry->advertisement.sptr_router);                advertising_router = sptr_database_entry->advertisement.sptr_router->ls_header.advertising_router;                advertising_router = net_to_host_long (advertising_router);                if ((age == OSPF_MAXIMUM_AGE)  &&                    (ospf.ospf_maxaged_lsas_removed_this_tick < ospf.ospf_maxaged_lsas_removed_per_tick ))                    {                    ospf.ospf_maxaged_lsas_removed_this_tick++;                    /* SPR 85432 -- Begin */                    if ((advertising_router == ospf.router_id) ||                        ((sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_NETWORK) && (test_return_type == PASS)) )                        {                        ospf_flood_advertisement_out_some_subset_of_the_routers_interfaces (                            sptr_database_entry->advertisement.sptr_router,                            sptr_area,                            NULL,                            NULL,                            TRUE);                        }                    else if ((sptr_database_entry->ls_database_freeme == FALSE) &&                             (sptr_database_entry->sptr_ls_database_retrans == NULL) &&                             (ospf.number_of_neighbors_in_exchange_state == ospf.number_of_neighbors_in_full_state))                        {                        sptr_database_entry->ls_database_freeme = TRUE;                        ospf_clean_up_retransmit_lists_affiliated_with_this_advertisement (sptr_database_entry);                        ospf_free_database_entry (sptr_database_entry);                        sptr_database_entry = NULL;                        }                    /* SPR#87019 */                    if (sptr_database_entry != NULL)                        {                        /*                         * Max age entry has been checked make it non maximum                         * so that the cleanup interval can take effect                         */                        ++age;                        sptr_database_entry->advertisement.sptr_router->ls_header.age = age;                        sptr_database_entry->advertisement.sptr_router->ls_header.age =                        host_to_net_short (sptr_database_entry->advertisement.sptr_router->ls_header.age);                        }                    }                /* This is a saftey net in case we never receive an ack from a                 * neighbor concerning the deletion of the route. It is unlikely                 * that this scenario will happen however, it is always good to make                 * sure we do not carry a deleted route forever. The cleanup interval                 * is set to fairly high value to avoid deletion of routes that have                 * not been acknowledged due to heavy traffic loads */                else if ((age >= (OSPF_MAXIMUM_AGE + OSPF_CLEANUP_INTERVAL+1)) &&                        (sptr_database_entry->ls_database_freeme == FALSE))                    {                        sptr_database_entry->ls_database_freeme = TRUE;                        ospf_clean_up_retransmit_lists_affiliated_with_this_advertisement (sptr_database_entry);                        (void) ospf_free_database_entry (sptr_database_entry);                    }                /* SPR 85432 -- End */                else                    {                    /* section 12.4, item (1) - (page 114-115) */                    /* Section of code from here moved up */                    if (((advertising_router == ospf.router_id) ||                        ((sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_NETWORK) &&                        (test_return_type == PASS))) && (age == OSPF_LSRefreshTime))  /* Refresh self originated advertisements */                        {                        ospf_originate_new_instance_of_the_link_state_advertisement (sptr_database_entry, sptr_area, FALSE);                        }                    }                }            }        }#if defined (__OPAQUE_LSA__)    first_pass_external = TRUE;        for (ls_type = TYPE_9_LSA; ls_type <= TYPE_11_LSA; ++ls_type)							/* for each type of advertisement */        {        for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[ls_type][index]);	/* for each hash list */            index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[ls_type][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;				age = sptr_database_entry->advertisement.sptr_router->ls_header.age;				age = net_to_host_short (age);				if (age < OSPF_MAXIMUM_AGE)					{					++age;					sptr_database_entry->advertisement.sptr_router->ls_header.age = age;					sptr_database_entry->advertisement.sptr_router->ls_header.age =						host_to_net_short (sptr_database_entry->advertisement.sptr_router->ls_header.age);#if defined (__OSPF_MIB__)                    if (ls_type == TYPE_9_LSA)                        {                        ospf2Mapi_request((void *)sptr_database_entry,                                          wrnOspfLocalLsdbUpdateReqType);                        }                    else if (ls_type == TYPE_10_LSA)                        {                        ospf2Mapi_request((void *)sptr_database_entry,                                          wrnOspfLsdbUpdateReqType);                        }#endif /* __OSPF_MIB__ */					}				div_result = div ((int) age, (int) OSPF_CheckAge);				if (div_result.rem == (int) NULL)	/* advertisement's LS age is a multiple of OSPF_CheckAge, so verify the LS checksum */					{					age = sptr_database_entry->advertisement.sptr_router->ls_header.age;					sptr_database_entry->advertisement.sptr_router->ls_header.age = 0x0000;					test_return_type = ospf_verify_LS_checksum ((void *) sptr_database_entry->advertisement.sptr_router,						sptr_database_entry->advertisement.sptr_router->ls_header.length /* in network order */,						sptr_database_entry->advertisement.sptr_router->ls_header.checksum);					sptr_database_entry->advertisement.sptr_router->ls_header.age = age;					}				age = sptr_database_entry->advertisement.sptr_router->ls_header.age;				age = net_to_host_short (age);				test_return_type = ospf_check_if_advertisements_link_state_id_is_equal_to_one_of_the_routers_own_IP_interface_addresses (						sptr_database_entry->advertisement.sptr_router);				advertising_router = sptr_database_entry->advertisement.sptr_router->ls_header.advertising_router;				advertising_router = net_to_host_long (advertising_router);				if ((age == OSPF_MAXIMUM_AGE)  && (ospf.ospf_maxaged_lsas_removed_this_tick < ospf.ospf_maxaged_lsas_removed_per_tick ))					{					ospf.ospf_maxaged_lsas_removed_this_tick++;					if ( (sptr_database_entry->ls_database_freeme == FALSE) && ( (advertising_router == ospf.router_id) ||						((sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_NETWORK) && (test_return_type == PASS)) ) )						{						(void) ospf_flood_advertisement_out_some_subset_of_the_routers_interfaces (sptr_database_entry->advertisement.sptr_router,							sptr_area, NULL, NULL, TRUE);						sptr_database_entry->ls_database_freeme = TRUE;						}                    else if ((sptr_database_entry->sptr_ls_database_retrans == NULL) &&						(ospf.number_of_neighbors_in_exchange_state == ospf.number_of_neighbors_in_full_state))						{						(void) ospf_free_database_entry (sptr_database_entry);						}					}				else					{					/* section 12.4, item (1) - (page 114-115) */					/* Section of code from here moved up */					if (((advertising_router == ospf.router_id) ||						((sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_NETWORK) &&						(test_return_type == PASS))) && (age == OSPF_LSRefreshTime))  /* Refresh self originated advertisements */						{						ospf_originate_new_instance_of_the_link_state_advertisement (sptr_database_entry, sptr_area, FALSE);						}					}				}			}		}#endif /* __OPAQUE_LSA__ */    }/***************************************************************************************************//* section 14, (page 145) */static void ospf_age_the_external_link_state_database    (    OSPF_AREA_ENTRY *sptr_area,    enum BOOLEAN first_pass_external    )    {	OSPF_LS_DATABASE_HEAD *sptr_ls_database_head;	OSPF_LS_DATABASE_ENTRY *sptr_database_entry;	OSPF_LS_DATABASE_ENTRY *sptr_next_database_entry = NULL;	div_t div_result;	USHORT age;	enum TEST test_return_type;	ULONG index;	ULONG advertising_router;    /* Check for external lsdb */    for (index = 0x00000000L, sptr_ls_database_head = &(ospf.external_database_hash_table[LS_EXTERNAL_LSA][index]);	/* for each hash list */         index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(ospf.external_database_hash_table[LS_EXTERNAL_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;			age = sptr_database_entry->advertisement.sptr_router->ls_header.age;			age = net_to_host_short (age);			if (first_pass_external == TRUE)				{				/* SPR 85432 -- Begin */				if (age != OSPF_MAXIMUM_AGE)				/* SPR 85432 -- End */					{					++age;					sptr_database_entry->advertisement.sptr_router->ls_header.age = age;					sptr_database_entry->advertisement.sptr_router->ls_header.age =						host_to_net_short (sptr_database_entry->advertisement.sptr_router->ls_header.age);#if defined (__OSPF_MIB__)		            /* tell MIB API to update this link state advertisement */			        ospf2Mapi_request( (void *)sptr_database_entry,						ospfExtLsdbUpdateReqType );#endif /* __OSPF_MIB__ */					}				div_result = div ((int) age, (int) OSPF_CheckAge);				if (div_result.rem == (int) NULL)	/* advertisement's LS age is a multiple of OSPF_CheckAge, so verify the LS checksum */					{					age = sptr_database_entry->advertisement.sptr_router->ls_header.age;					sptr_database_entry->advertisement.sptr_router->ls_header.age = 0x0000;					test_return_type = ospf_verify_LS_checksum ((void *) sptr_database_entry->advertisement.sptr_router,						sptr_database_entry->advertisement.sptr_router->ls_header.length /* in network order */,						sptr_database_entry->advertisement.sptr_router->ls_header.checksum);					sptr_database_entry->advertisement.sptr_router->ls_header.age = age;					}				age = sptr_database_entry->advertisement.sptr_router->ls_header.age;				age = net_to_host_short (age);				test_return_type = ospf_check_if_advertisements_link_state_id_is_equal_to_one_of_the_routers_own_IP_interface_addresses (					sptr_database_entry->advertisement.sptr_router);				advertising_router = sptr_database_entry->advertisement.sptr_router->ls_header.advertising_router;				advertising_router = net_to_host_long (advertising_router);				if ((age == OSPF_MAXIMUM_AGE)  && (ospf.ospf_maxaged_lsas_removed_this_tick < ospf.ospf_maxaged_lsas_removed_per_tick ))					{					ospf.ospf_maxaged_lsas_removed_this_tick++;					/* SPR 85432 -- Begin */					if ((advertising_router == ospf.router_id) ||                        ((sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_NETWORK) &&                          (test_return_type == PASS)) )                        {                        (void) ospf_flood_advertisement_out_some_subset_of_the_routers_interfaces (sptr_database_entry->advertisement.sptr_router,                                                                                                   sptr_area, NULL, NULL, TRUE);                        /*SPR 85893 --Begin */						/* This LSA is marked for deletion, and should only be visible  */						/* to reTransmission queue only									*/						sptr_database_entry->ls_database_pending_delete = TRUE;						/*SPR 85893 --End */                        }                    else if ((sptr_database_entry->ls_database_freeme == FALSE) &&		            	(sptr_database_entry->sptr_ls_database_retrans == NULL) &&						(ospf.number_of_neighbors_in_exchange_state == ospf.number_of_neighbors_in_full_state))						{                        sptr_database_entry->ls_database_freeme = TRUE;						ospf_clean_up_retransmit_lists_affiliated_with_this_advertisement (sptr_database_entry);						(void) ospf_free_database_entry (sptr_database_entry);                        sptr_database_entry = NULL;						}					/* SPR#87019 */					if (sptr_database_entry != NULL)						{						/*                         * Max age entry has been checked make it non maximum						 * so that the cleanup interval can take effect                         */						++age;						sptr_database_entry->advertisement.sptr_router->ls_header.age = age;						sptr_database_entry->advertisement.sptr_router->ls_header.age =						host_to_net_short (sptr_database_entry->advertisement.sptr_router->ls_header.age);						}					}				else if ((age >= (OSPF_MAXIMUM_AGE + OSPF_CLEANUP_INTERVAL+1)) &&						(sptr_database_entry->ls_database_freeme == FALSE))					{						sptr_database_entry->ls_database_freeme = TRUE;						ospf_clean_up_retransmit_lists_affiliated_with_this_advertisement (sptr_database_entry);						(void) ospf_free_database_entry (sptr_database_entry);					}				/* SPR 85432 -- End */                else                    {                    if (((advertising_router == ospf.router_id) ||                        ((sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_NETWORK) &&                        (test_return_type == PASS))) && (age == OSPF_LSRefreshTime))  /* Refresh self originated advertisements */

⌨️ 快捷键说明

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