📄 neighbor_table.c
字号:
}}/*------------------------------------------------------------------------*/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 + -