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

📄 hna_table.c

📁 OLSR Implementation for XORP
💻 C
📖 第 1 页 / 共 2 页
字号:
	    				hna_subnet=(struct  subnet_list *)malloc(sizeof(struct  subnet_list));	    				hna_subnet->next=host_entry->hna_list_of_subnet;	    				host_entry->hna_list_of_subnet=hna_subnet;	    				hna_host=olsr_insert_host_in_order_list(host_entry,subnet_entry);	    				/*linking the last and the dest*/	    				hna_host->host=host_entry;	    				hna_subnet->subnet=subnet_entry;										/******** added by Y.Ge *******/					/* update subnet timer */					timeradd(&now, &hold_time_tmp, &hna_subnet->subnet_timer);					/******** end of revision ******/				}	  		}			/**************** added by Y.Ge **********/			else			{				/* update subnet timer */				timeradd(&now, &hold_time_tmp, &hna_subnet->subnet_timer);			}			/**************** end of revision **********/		}			netaddr=netaddr->next;	}    	/*if(debug_level>5)	{		printf("the message->originator;%s\n",inet_ntop(AF_INET6,&(message->originator),str,46));		olsr_print_hna_host_table();		olsr_print_hna_subnet_table();	}*/		return;}/*------------------------------------------------------------------------*/voidolsr_release_hna_table(){  olsr_u8_t                  index;  struct hna_subnet_entry    *hna_subnet;  struct hna_subnet_entry    *hna_subnet_tmp;  struct hna_subnet_hash     *subnet_hash_hna;  struct hna_host_entry      *hna_host;  struct hna_host_entry      *hna_host_tmp;  struct hna_host_hash       *host_hash_hna;  for(index=0;index<HASHSIZE;index++)  {    subnet_hash_hna=&hnasubnettable[index];    hna_subnet=subnet_hash_hna->hna_subnet_forw;    while(hna_subnet!=(struct hna_subnet_entry *)subnet_hash_hna)    {		hna_subnet_tmp=hna_subnet;		hna_subnet=hna_subnet->hna_subnet_forw;			olsr_delete_hna_subnet_table(hna_subnet_tmp);     }  }  for(index=0;index<HASHSIZE;index++)  {      host_hash_hna=&hnahosttable[index];      hna_host=host_hash_hna->hna_host_forw;      while(hna_host!=(struct hna_host_entry *)host_hash_hna)	  {	    hna_host_tmp=hna_host;	    hna_host=hna_host->hna_host_forw;	    olsr_delete_hna_host_table(hna_host_tmp);	  }   }}/*------------------------------------------------------------------------*//************* added by Y.Ge  ************/void olsr_time_out_subnet_list(struct hna_host_entry	*hna_host){	struct subnet_list	*subnet_list;	struct subnet_list	*subnet_list_tmp;	struct hna_subnet_entry	*hna_subnet;	int	hna_time_out = 0;		subnet_list = hna_host->hna_list_of_subnet;	hna_host->hna_list_of_subnet = NULL;		while(subnet_list!=NULL)	{		if(olsr_timed_out(&subnet_list->subnet_timer))		{			hna_time_out = 1;						if (debug_level>1)			{				printf("-------------- time (%d, %d), hna_hubnet timed out! --------\n", now.tv_sec, now.tv_usec);				printf("the hna host is: %s, subnet is:%s\n", convert_address_to_string(&hna_host->hna_host_addr), convert_address_to_string(&subnet_list->subnet->hna_subnet_addr));				printf("hna subnet timer is: %d,   %d\n", subnet_list->subnet_timer.tv_sec,subnet_list->subnet_timer.tv_usec);								fprintf(y_file,"-------------- time (%d, %d), hna_hubnet timed out! --------\n", now.tv_sec, now.tv_usec);				fprintf(y_file,"the hna host is: %s, subnet is:\n", convert_address_to_string(&hna_host->hna_host_addr), convert_address_to_string(&subnet_list->subnet->hna_subnet_addr));				fprintf(y_file,"hna subnet timer is: %d,   %d\n", subnet_list->subnet_timer.tv_sec,subnet_list->subnet_timer.tv_usec);			}							hna_subnet = subnet_list->subnet;				olsr_delete_list_of_subnet(hna_subnet, &hna_host->hna_host_addr);			subnet_list_tmp = subnet_list;			subnet_list = subnet_list_tmp->next;			free (subnet_list_tmp);			changes_topology=UP;		}		else		{			subnet_list_tmp = subnet_list;			subnet_list = subnet_list->next;			subnet_list_tmp->next = hna_host->hna_list_of_subnet;			hna_host->hna_list_of_subnet = subnet_list_tmp;			}	}		if (hna_time_out)	{		if (debug_level > 1)		{			printf ("************* after HNA subnet time out, the HNA tables are *************\n");			olsr_print_hna_host_table();			olsr_print_hna_subnet_table();						fprintf (y_file,"************* after HNA subnet time out, the HNA tables are *************\n");			olsr_print_trace_hna_host_table();			olsr_print_trace_hna_subnet_table();		}		hna_time_out = 0;	}}/************* end of revission **********//*------------------------------------------------------------------------*/voidolsr_time_out_hna_table(){	/* 	 We only check the last table because we didn't include a time out in the dest entries	*/	olsr_u8_t                            	index;	struct hna_host_entry           	*hna_host;	struct hna_host_entry           	*hna_host_tmp;	struct hna_host_hash            	*host_hash_hna;	int	hna_time_out = 0;  	for(index=0;index<HASHSIZE;index++)	{		host_hash_hna=&hnahosttable[index];		hna_host=host_hash_hna->hna_host_forw;		while(hna_host!=(struct hna_host_entry *)host_hash_hna)		{			if(olsr_timed_out(&hna_host->hna_host_timer))			{				hna_time_out = 1;				if (debug_level>1)				{					printf("-------------- time (%d, %d), hna_host timed out! --------\n", now.tv_sec, now.tv_usec);					printf("the hna host is: %s\n", convert_address_to_string(&hna_host->hna_host_addr));					printf("hna host timer is: %d,   %d\n", hna_host->hna_host_timer.tv_sec,hna_host->hna_host_timer.tv_usec);										fprintf(y_file,"-------------- time (%d, %d), hna_host timed out! --------\n", now.tv_sec, now.tv_usec);					fprintf(y_file,"the hna host is: %s\n", convert_address_to_string(&hna_host->hna_host_addr));					fprintf(y_file,"hna host timer is: %d,   %d\n", hna_host->hna_host_timer.tv_sec,hna_host->hna_host_timer.tv_usec);				}				hna_host_tmp=hna_host;				hna_host=hna_host->hna_host_forw;				olsr_delete_hna_host_table(hna_host_tmp);				changes_topology=UP;			}			else			{				/************** added by Y.Ge **********/				olsr_time_out_subnet_list(hna_host);				/************* end of revision *********/								hna_host=hna_host->hna_host_forw;			}									}	}		if (hna_time_out)	{		if (debug_level > 1)		{			printf ("************* after HNA host time out, the HNA tables are *************\n");			olsr_print_hna_host_table();			olsr_print_hna_subnet_table();						fprintf (y_file,"************* after HNA host time out, the HNA tables are *************\n");			olsr_print_trace_hna_host_table();			olsr_print_trace_hna_subnet_table();		}		hna_time_out = 0;	}}/*------------------------------------------------------------------------*/voidolsr_print_hna_host_table(){	olsr_u8_t           	index;	struct hna_host_entry	*hna_host;	struct hna_host_hash	*host_hash_hna;	struct subnet_list   	*hna_subnet_list;	char str[46];	printf("hna host table: %02d:%02d:%02d.        %06lu\n", nowtm->tm_hour, nowtm->tm_min, nowtm->tm_sec, now.tv_usec);	printf("-------hna host table------------\n");  	for(index=0;index<HASHSIZE;index++)	{		host_hash_hna=&hnahosttable[index];		for(hna_host=host_hash_hna->hna_host_forw;hna_host!=(struct hna_host_entry *)host_hash_hna;hna_host=hna_host->hna_host_forw)		{			printf("%s ;[host_of; ",inet_ntop(AF_INET6,&hna_host->hna_host_addr,str,46));			hna_subnet_list=hna_host->hna_list_of_subnet;	  			while(hna_subnet_list!=NULL)			{				printf("%s <%d, %d> ;",inet_ntop(AF_INET6,(&hna_subnet_list->subnet->hna_subnet_addr),str,46), hna_subnet_list->subnet_timer.tv_sec, hna_subnet_list->subnet_timer.tv_usec);				hna_subnet_list=hna_subnet_list->next;			}			printf("]\n");			printf ("     -------->hna host timer: %d   %d\n", hna_host->hna_host_timer.tv_sec, hna_host->hna_host_timer.tv_usec); 		}	}}/*------------------------------------------------------------------------*/voidolsr_print_hna_subnet_table(){	olsr_u8_t               	index;	struct hna_subnet_entry		*hna_subnet;	struct hna_subnet_hash		*subnet_hash_hna;	struct host_list              	*hna_host_list;	char str[46];	printf("hna subnet table: %02d:%02d:%02d.       %06lu\n", nowtm->tm_hour, nowtm->tm_min, nowtm->tm_sec, now.tv_usec);	printf("-------hna subnet table------------\n");  	for(index=0;index<HASHSIZE;index++)	{		subnet_hash_hna=&hnasubnettable[index];		for(hna_subnet=subnet_hash_hna->hna_subnet_forw;hna_subnet!=(struct hna_subnet_entry *)subnet_hash_hna;hna_subnet=hna_subnet->hna_subnet_forw)		{			printf("%s ;[subnet_of; ",inet_ntop(AF_INET6,&hna_subnet->hna_subnet_addr,str,46));			hna_host_list=hna_subnet->hna_list_of_host;	  			while(hna_host_list!=NULL)			{				printf("%s  ;",inet_ntop(AF_INET6,(&hna_host_list->host->hna_host_addr),str,46));				hna_host_list=hna_host_list->next;			}			printf("]\n");		}	}}/*------------------------------------------------------------------------*//********* added bby Y.Ge *********/voidolsr_print_trace_hna_host_table(){	olsr_u8_t           	index;	struct hna_host_entry	*hna_host;	struct hna_host_hash	*host_hash_hna;	struct subnet_list   	*hna_subnet_list;	char str[46];	fprintf(y_file,"hna host table: %02d:%02d:%02d.        %06lu\n", nowtm->tm_hour, nowtm->tm_min, nowtm->tm_sec, now.tv_usec);	fprintf(y_file,"-------hna host table------------\n");  	for(index=0;index<HASHSIZE;index++)	{		host_hash_hna=&hnahosttable[index];		for(hna_host=host_hash_hna->hna_host_forw;hna_host!=(struct hna_host_entry *)host_hash_hna;hna_host=hna_host->hna_host_forw)		{			fprintf(y_file,"%s ;[host_of; ",inet_ntop(AF_INET6,&hna_host->hna_host_addr,str,46));			hna_subnet_list=hna_host->hna_list_of_subnet;	  			while(hna_subnet_list!=NULL)			{				fprintf(y_file,"%s  ;",inet_ntop(AF_INET6,(&hna_subnet_list->subnet->hna_subnet_addr),str,46));				hna_subnet_list=hna_subnet_list->next;			}			fprintf(y_file,"]\n");			fprintf (y_file,"     -------->hna host timer: %d   %d\n", hna_host->hna_host_timer.tv_sec, hna_host->hna_host_timer.tv_usec); 		}	}}/*------------------------------------------------------------------------*/voidolsr_print_trace_hna_subnet_table(){	olsr_u8_t               	index;	struct hna_subnet_entry		*hna_subnet;	struct hna_subnet_hash		*subnet_hash_hna;	struct host_list              	*hna_host_list;	char str[46];	fprintf(y_file,"hna subnet table: %02d:%02d:%02d.       %06lu\n", nowtm->tm_hour, nowtm->tm_min, nowtm->tm_sec, now.tv_usec);	fprintf(y_file,"-------hna subnet table------------\n");  	for(index=0;index<HASHSIZE;index++)	{		subnet_hash_hna=&hnasubnettable[index];		for(hna_subnet=subnet_hash_hna->hna_subnet_forw;hna_subnet!=(struct hna_subnet_entry *)subnet_hash_hna;hna_subnet=hna_subnet->hna_subnet_forw)		{			fprintf(y_file,"%s ;[subnet_of; ",inet_ntop(AF_INET6,&hna_subnet->hna_subnet_addr,str,46));			hna_host_list=hna_subnet->hna_list_of_host;	  			while(hna_host_list!=NULL)			{				fprintf(y_file,"%s  ;",inet_ntop(AF_INET6,(&hna_host_list->host->hna_host_addr),str,46));				hna_host_list=hna_host_list->next;			}			fprintf(y_file,"]\n");		}	}}/*------------------------------------------------------------------------*//* * Perform prefix comparison bitwise * if return 1, addr == prefix * if return 0, addr!=prefix */int olsr_prefix_compare(struct in6_addr *addr, struct in6_addr *prefix, int nprefix){	int i;	if (nprefix > 128)		return 0;	for (i = 0; nprefix > 0; nprefix -= 8, i++) {		if (nprefix >= 8) {			if (addr->s6_addr[i] != prefix->s6_addr[i])				return 0;		} else {			if (((addr->s6_addr[i] ^ prefix->s6_addr[i]) &			     ((~0) << (8 - nprefix))) != 0)				return 0;			return 1;		}	}	return 1;};/*------------------------------------------------------------------------*//* * Perform address setting bitwise according to prefix */int olsr_prefix_setting(struct in6_addr *addr, int nprefix){	int i;	if (nprefix > 128)		return 0;	for (i = 0; i < 16; nprefix -= 8, i++) {		if(nprefix <= 0)			addr->s6_addr[i]=0;		else if(nprefix < 8)			addr->s6_addr[i]=addr->s6_addr[i]&((~0)<<(8-nprefix));	}	return 1;};/*------------------------------------------------------------------------*/

⌨️ 快捷键说明

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