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

📄 neighbor_table.c

📁 OLSR Implementation for XORP
💻 C
📖 第 1 页 / 共 3 页
字号:
	}}/*------------------------------------------------------------------------*/voidolsr_time_out_two_hop_neighbors(struct neighbor_entry  *neighbor){	struct  neighbor_2_list_entry *two_hop_list;	struct  neighbor_2_list_entry *two_hop_list_tmp;	struct  neighbor_2_entry      *two_hop_entry;	int	two_hop_neighbor_time_out = 0;		two_hop_list = neighbor->neighbor_2_list;	neighbor->neighbor_2_list=NULL;		while(two_hop_list!=NULL)	{		//printf ("two_hop_list !=NULL!\n");		if(olsr_timed_out(&two_hop_list->neighbor_2_timer))		{			two_hop_neighbor_time_out = 1;						if (debug_level > 1)			{				printf ("\n\n-----------------time(%d, %d), two hop neighbor timed out!--------------\n",now.tv_sec, now.tv_usec);				printf (" the two hop neighbor is:%s\n", convert_address_to_string(&two_hop_list->neighbor_2->neighbor_2_addr));				printf (" tow hop timer is: %d     %d\n\n", two_hop_list->neighbor_2_timer.tv_sec, two_hop_list->neighbor_2_timer.tv_usec);							fprintf (y_file,"\n\n-----------------time(%d, %d), two hop neighbor timed out!--------------\n",now.tv_sec, now.tv_usec);				fprintf (y_file," the two hop neighbor is:%s\n", convert_address_to_string(&two_hop_list->neighbor_2->neighbor_2_addr));				fprintf (y_file," tow hop timer is: %d     %d\n\n", two_hop_list->neighbor_2_timer.tv_sec, two_hop_list->neighbor_2_timer.tv_usec);						}			two_hop_entry=two_hop_list->neighbor_2;			two_hop_entry->neighbor_2_pointer--;			olsr_delete_neighbor_pointer(two_hop_entry,&neighbor->neighbor_addr);      			if(two_hop_entry->neighbor_2_pointer<1)			/* means this two hop entry is no more pointed, not reachable */			{	    				olsr_remque((struct olsr_qelem *)two_hop_entry);	      				free((void *)two_hop_entry);			}			two_hop_list_tmp=two_hop_list;			two_hop_list=two_hop_list->neighbor_2_next;	  			free(two_hop_list_tmp);			/* This flag is set to UP to recalculate the MPR set and the routing table*/			changes_neighborhood=UP;			changes_topology=UP;		}      		else		{			two_hop_list_tmp=two_hop_list;			two_hop_list=two_hop_list->neighbor_2_next;			two_hop_list_tmp->neighbor_2_next=neighbor->neighbor_2_list;			neighbor->neighbor_2_list=two_hop_list_tmp;		}	}		if (two_hop_neighbor_time_out && debug_level > 1)	{		printf ("XXXXXXXXXX after time out two hop neighbor table, the two hop neighbor table is:XXXXXXXXXXXX\n");		olsr_print_two_hop_neighbor_table();					fprintf (y_file,"XXXXXXXXXX after time out two hop neighbor table, the two hop neighbor table is:XXXXXXXXX\n");		olsr_print_trace_neighbor_table(); 		}}/*------------------------------------------------------------------------*//***************** commented by Y.Ge ***************//*voidolsr_time_out_neighborhood_tables(){	olsr_u8_t              index;	struct neighbor_entry  *neighbor;	struct neighbor_entry  *neighbor_tmp;	struct neighborhash    *hash_neighbor;  	for(index=0;index<HASHSIZE;index++)	{		hash_neighbor=&neighbortable.neighborhash[index];		neighbor=hash_neighbor->neighbor_forw;		while(neighbor!=(struct neighbor_entry *)hash_neighbor)		{ 			if(debug_level > 5)			{				printf("timeout: %d   %d\n ",neighbor->neighbor_timer.tv_sec,neighbor->neighbor_timer.tv_usec);				printf("now: %d   %d\n ",now.tv_sec,now.tv_usec);			}			if(olsr_timed_out(&neighbor->neighbor_timer))			{				if((neighbor->neighbor_status==NBS_ASYM) ||(neighbor->neighbor_status==NBS_LOST))				{					if(debug_level > 2)						printf("deleting neighbor entry\n");					neighbor_tmp=neighbor;					neighbor=neighbor->neighbor_forw;					olsr_delete_neighbor_table(neighbor_tmp);					// This flag is set to UP to recalculate the MPR set and the routing table					changes_neighborhood=UP;					changes_topology=UP;				}				else				{					neighbor->neighbor_status=NBS_LOST;					neighbor=neighbor->neighbor_forw;				}			}			else			{				olsr_time_out_two_hop_neighbors(neighbor);				neighbor=neighbor->neighbor_forw;			}		}	}}*//*------------------------------------------------------------------------*//****************** added by Y.Ge ******************//* this function not only define if the link should be timed out, but define other link_changes as well */voidolsr_time_out_neighborhood_tables(){	olsr_u8_t              index;	struct neighbor_entry  *neighbor;	struct neighbor_entry  *neighbor_tmp;	struct neighborhash    *hash_neighbor;	int                    i;	int                    changed = 0;	struct timeval        	tmp_timer, tmp_timeval; //added by Y.Ge     	for(index=0;index<HASHSIZE;index++)	{		hash_neighbor=&neighbortable.neighborhash[index];		neighbor=hash_neighbor->neighbor_forw;		while(neighbor!=(struct neighbor_entry *)hash_neighbor)		{ 			/*---------------*/			/*if(debug_level > 2 && print_time_debug ==1)			{				printf ("\n\n in timeout neighbortables!\n");				printf ("...NOW, looking at neighbor %s\n", convert_address_to_string(&neighbor->neighbor_addr));				printf("neighbor_timer: %d   %d\n ",neighbor->neighbor_timer.tv_sec,neighbor->neighbor_timer.tv_usec);				printf ("neighbor_link_sym_timer: %d   %d\n", neighbor->neighbor_link_sym_timer.tv_sec, neighbor->neighbor_link_sym_timer.tv_usec);				printf ("neighbor_link_asym_timer: %d   %d\n", neighbor->neighbor_link_asym_timer.tv_sec, neighbor->neighbor_link_asym_timer.tv_usec);				printf("now: %d   %d\n ",now.tv_sec,now.tv_usec);			}*/			/*--------------*/			/************ added by Y.Ge *************/			/* 			 * hysteresis 			 */			if(use_hyst)			{			 	if(olsr_timed_out(&neighbor->next_hello_timer))				{					if (debug_level > 1)					{						printf ("\n\n............neighbor %s: in time out next hello timer!...............\n",convert_address_to_string(&neighbor->neighbor_addr));						printf("next_hello_timer: %d   %d\n ",neighbor->next_hello_timer.tv_sec,neighbor->next_hello_timer.tv_usec);						printf ("neighbor_link_lost_timer: %d   %d\n", neighbor->neighbor_link_lost_timer.tv_sec, neighbor->neighbor_link_lost_timer.tv_usec);						printf ("neighbor_timer: %d   %d\n", neighbor->neighbor_timer.tv_sec, neighbor->neighbor_timer.tv_usec);						printf("now: %d   %d\n ",now.tv_sec,now.tv_usec);						printf ("originally, neighbor status: %d, neighbor hyst: %f\n",neighbor->neighbor_status, neighbor->neighbor_hysavg);												fprintf (y_file,"\n\n............neighbor %s: in time out next hello timer!...............\n",convert_address_to_string(&neighbor->neighbor_addr));						fprintf(y_file,"next_hello_timer: %d   %d\n ",neighbor->next_hello_timer.tv_sec,neighbor->next_hello_timer.tv_usec);						fprintf (y_file,"neighbor_link_lost_timer: %d   %d\n", neighbor->neighbor_link_lost_timer.tv_sec, neighbor->neighbor_link_lost_timer.tv_usec);						fprintf (y_file,"neighbor_timer: %d   %d\n", neighbor->neighbor_timer.tv_sec, neighbor->neighbor_timer.tv_usec);						fprintf(y_file,"now: %d   %d\n ",now.tv_sec,now.tv_usec);						fprintf (y_file,"originally, neighbor status: %d, neighbor hyst: %f\n",neighbor->neighbor_status, neighbor->neighbor_hysavg);					}					neighbor->neighbor_hysavg = hysteresis (neighbor->neighbor_hysavg, 0);										/* update next hello timer */					olsr_init_timer(neighbor->h_time_value*1000, &tmp_timer);					timeradd(&now, &tmp_timer, &neighbor->next_hello_timer);										if (debug_level > 1)					{						printf("after recalculation, neighbor hyst is: %f\n", neighbor->neighbor_hysavg);						fprintf(y_file, "after recalculation, neighbor hyst is: %f\n", neighbor->neighbor_hysavg);					}										if (neighbor->neighbor_hysavg < HYST_THRESHOLD_LOW)					{						neighbor->link_pending = 1;										if (neighbor->neighbor_status == SYM_LINK)						{							changes_neighborhood=UP;							changes_topology=UP;							changed = 1;						}												/* set the link lost timer */						timeradd(&now, &hold_time_neighbor, &tmp_timeval);						if (compare_timer(&neighbor->neighbor_timer, &tmp_timeval)==0)							olsr_assign_timer(&neighbor->neighbor_timer, &neighbor->neighbor_link_lost_timer);						else							olsr_assign_timer(&tmp_timeval, &neighbor->neighbor_link_lost_timer);													/* set the neighbor staatus */						neighbor->neighbor_status = LOST_LINK;												if (debug_level >1)						{							printf ("XXXXXXXXXXXX hyst low! change neighbor status to LOST link! XXXXXXXXX\n");							printf (" now the link status is: %d\n", neighbor->neighbor_status);														fprintf (y_file,"XXXXXXXXXXXX hyst low! change neighbor status to LOST link! XXXXXXXXX\n");							fprintf (y_file," now the link status is: %d\n", neighbor->neighbor_status);									}					}					else					{						if (neighbor->neighbor_hysavg < HYST_THRESHOLD_HIGH)						{							if(neighbor->neighbor_status == SYM_LINK)							{								changes_neighborhood=UP;								changes_topology=UP;								changed = 1;							}														/* decide link status */							if (!olsr_timed_out(&neighbor->neighbor_link_lost_timer))							{								neighbor->neighbor_status = LOST_LINK;															}							else							{								neighbor->neighbor_status = ASYM_LINK;							}														if (debug_level >1)							{								printf ("XXXXXXXXXXXX hyst below high! change neighbor status! XXXXXXXXX\n");								printf (" now the link status is: %d\n", neighbor->neighbor_status);															fprintf (y_file,"XXXXXXXXXXXX hyst below high! change neighbor status! XXXXXXXXX\n");								fprintf (y_file," now the link status is: %d\n", neighbor->neighbor_status);										}														}					}										if (debug_level > 1)					{						printf ("\n\n***** after next hello time out, the timers are \n");						printf("next_hello_timer: %d   %d\n ",neighbor->next_hello_timer.tv_sec,neighbor->next_hello_timer.tv_usec);						printf ("neighbor_link_lost_timer: %d   %d\n", neighbor->neighbor_link_lost_timer.tv_sec, neighbor->neighbor_link_lost_timer.tv_usec);						printf ("neighbor_timer: %d   %d\n", neighbor->neighbor_timer.tv_sec, neighbor->neighbor_timer.tv_usec);						printf("now: %d   %d\n ",now.tv_sec,now.tv_usec);						printf ("new, neighbor status: %d, neighbor hyst: %f\n",neighbor->neighbor_status, neighbor->neighbor_hysavg);												fprintf (y_file,"\n\n***** after next hello time out, the timers are\n");						fprintf(y_file,"next_hello_timer: %d   %d\n ",neighbor->next_hello_timer.tv_sec,neighbor->next_hello_timer.tv_usec);						fprintf (y_file,"neighbor_link_lost_timer: %d   %d\n", neighbor->neighbor_link_lost_timer.tv_sec, neighbor->neighbor_link_lost_timer.tv_usec);						fprintf (y_file,"neighbor_timer: %d   %d\n", neighbor->neighbor_timer.tv_sec, neighbor->neighbor_timer.tv_usec);						fprintf(y_file,"now: %d   %d\n ",now.tv_sec,now.tv_usec);						fprintf (y_file,"now, neighbor status: %d, neighbor hyst: %f\n",neighbor->neighbor_status, neighbor->neighbor_hysavg);					}				}			}			/************* end of revision **********/			/*			 * the L_time expires,			 * remove the link			 */			/*printf ("neighbor_timer: %d   %d\n", neighbor->neighbor_timer.tv_sec, neighbor->neighbor_timer.tv_usec);			fprintf (y_file,"neighbor_timer: %d   %d\n", neighbor->neighbor_timer.tv_sec, neighbor->neighbor_timer.tv_usec);*/			 			if(olsr_timed_out(&neighbor->neighbor_timer))			{				/*-----------------*/				if(debug_level > 6)				{					printf("\n\ndeleting neighbor entry %s\n", convert_address_to_string(&neighbor->neighbor_addr));				}				/*-----------------*/				neighbor_tmp=neighbor;				neighbor=neighbor->neighbor_forw;				if (debug_level > 1)				{					printf ("\n\n............neighbor %s: in time out, delete neighbor table!...............\n",convert_address_to_string(&neighbor_tmp->neighbor_addr));					printf("neighbor_timer: %d   %d\n ",neighbor_tmp->neighbor_timer.tv_sec,neighbor_tmp->neighbor_timer.tv_usec);					printf ("neighbor_link_sym_timer: %d   %d\n", neighbor_tmp->neighbor_link_sym_timer.tv_sec, neighbor_tmp->neighbor_link_sym_timer.tv_usec);					printf ("neighbor_link_asym_timer: %d   %d\n", neighbor_tmp->neighbor_link_asym_timer.tv_sec, neighbor_tmp->neighbor_link_asym_timer.tv_usec);					printf("now: %d   %d\n ",now.tv_sec,now.tv_usec);										fprintf (y_file,"\n\n............neighbor %s: in time out, delete neighbor table!...............\n",convert_address_to_string(&neighbor_tmp->neighbor_addr));					fprintf(y_file,"neighbor_timer: %d   %d\n ",neighbor_tmp->neighbor_timer.tv_sec,neighbor_tmp->neighbor_timer.tv_usec);					fprintf (y_file,"neighbor_link_sym_timer: %d   %d\n", neighbor_tmp->neighbor_link_sym_timer.tv_sec, neighbor_tmp->neighbor_link_sym_timer.tv_usec);					fprintf (y_file,"neighbor_link_asym_timer: %d   %d\n", neighbor_tmp->neighbor_link_asym_timer.tv_sec, neighbor_tmp->neighbor_link_asym_timer.tv_usec);					fprintf(y_file,"now: %d   %d\n ",now.tv_sec,now.tv_usec);				}				

⌨️ 快捷键说明

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