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

📄 aodv_route_table_stat.ex.c

📁 opnet ad hoc adov routing
💻 C
字号:
/** Aodv_Route_Table_Stat.ex.c              **//****************************************//*              Written	                *//*                 by                   *//*            Lyes Guemari              *//*                                   	*//*   National Inst. of Stands & Tech    *//*       Washington, D.C., U.S.A.      	*//****************************************//** Include directives                 **/#include "Aodv_Route_Table_Stat.h"#include <stdlib.h>#include <opnet.h>/** Function definitions               **/Aodv_Route_Table_Stataodv_rt_create(){	int                     i;	Aodv_Route_Table_Stat   route_table;		route_table = (Aodv_Route_Table_Entry*) calloc(N_MAX, sizeof(Aodv_Route_Table_Entry));	if(route_table == NULL)		{		op_sim_end("Fail to init route table","","","");		}	// Init	for(i = 0; i < N_MAX ; i++)	  {       	    route_table[i].entry_exist       = 0;	    route_table[i].dest_ip_addr      = i;	    route_table[i].dest_seq_nb       = -1;	    route_table[i].hop_count         = OPC_INT_INFINITY;	    route_table[i].last_hop_count    = OPC_INT_INFINITY;	    route_table[i].next_hop          = OPC_INT_UNDEF;	    route_table[i].list_prec         = aodv_list_create();	    route_table[i].expi_time         = 0.0;	    route_table[i].breakage_flag     = 0;    	    route_table[i].repair_flag       = 0;	    route_table[i].gratuitous_flag   = 0;	}	return route_table;}int aodv_rt_size (Aodv_Route_Table_Stat route_table){	int size = 0;	int i;	for(i = 0; i < N_MAX; i++)	{		if(route_table[i].entry_exist)			size++;	}	return size;}Aodv_Route_Table_Entry * aodv_rt_create_entry (Aodv_Route_Table_Stat route_table, int dest_ip_addr){		route_table[dest_ip_addr].entry_exist       = 1; 	    route_table[dest_ip_addr].dest_ip_addr      = dest_ip_addr;	    route_table[dest_ip_addr].dest_seq_nb       = -1;	    route_table[dest_ip_addr].hop_count         = OPC_INT_INFINITY;	    route_table[dest_ip_addr].last_hop_count    = OPC_INT_INFINITY;	    route_table[dest_ip_addr].next_hop          = OPC_INT_UNDEF;	    route_table[dest_ip_addr].list_prec         = aodv_list_create();	    route_table[dest_ip_addr].expi_time         = 0.0;	    route_table[dest_ip_addr].breakage_flag     = 0;    	    route_table[dest_ip_addr].repair_flag       = 0;	    route_table[dest_ip_addr].gratuitous_flag   = 0;	  // Return a pointer to the new entry  return &route_table[dest_ip_addr];}Aodv_Route_Table_Entry * aodv_rt_access_entry (Aodv_Route_Table_Stat route_table, int dest_ip_addr){	if(route_table[dest_ip_addr].entry_exist)	{	return &route_table[dest_ip_addr];	}	else	{	return OPC_NIL;	}}Boolean aodv_rt_lookup_entry (Aodv_Route_Table_Stat route_table, int dest_ip_addr){	Boolean result = OPC_FALSE;	if(route_table[dest_ip_addr].entry_exist)		result = OPC_TRUE;	return result;}int aodv_rt_lookup_dest_seq_nb (Aodv_Route_Table_Stat route_table, int dest_ip_addr){	if(route_table[dest_ip_addr].entry_exist)	{	return route_table[dest_ip_addr].dest_seq_nb;	}	else	{	return 0;	}}int aodv_rt_entry_broken (Aodv_Route_Table_Stat route_table, int dest_ip_addr){	if(route_table[dest_ip_addr].entry_exist)	{	return route_table[dest_ip_addr].breakage_flag;	}	else	{	  return 0;	}}int aodv_rt_entry_under_repair (Aodv_Route_Table_Stat route_table, int dest_ip_addr){	if(route_table[dest_ip_addr].entry_exist)	{	return route_table[dest_ip_addr].repair_flag;	}	else	{	  return 0;	}}void aodv_rt_entry_schedule_intrpt (Aodv_Route_Table_Stat route_table,int dest_ip_addr, double expi_time){  if(route_table[dest_ip_addr].entry_exist)	{    aodv_entry_schedule_intrpt(&route_table[dest_ip_addr],expi_time);	}  else	{    //printf("Warning @ rt: schedule intrpt for a route that does not exist\n");	}}void aodv_rt_entry_cancel_intrpt (Aodv_Route_Table_Stat route_table, int dest_ip_addr){  if(route_table[dest_ip_addr].entry_exist)	{    aodv_entry_cancel_intrpt(&route_table[dest_ip_addr]);	}  else	{    //printf("Warning @ rt: cancel intrpt for a route that does not exist\n");	}}void aodv_rt_entry_reschedule_intrpt (Aodv_Route_Table_Stat route_table,int dest_ip_addr, double expi_time){  if(route_table[dest_ip_addr].entry_exist)	{    aodv_entry_reschedule_intrpt(&route_table[dest_ip_addr], expi_time);	}    else	{    //printf("Warning @ rt: reschedule intrpt for a route that does not exist\n");	}}void aodv_rt_entry_extend_intrpt (Aodv_Route_Table_Stat route_table,int dest_ip_addr, double expi_time){  if((route_table[dest_ip_addr].entry_exist && route_table[dest_ip_addr].expi_time < expi_time)	  ||	  (route_table[dest_ip_addr].entry_exist && route_table[dest_ip_addr].hop_count == OPC_INT_INFINITY))	{    aodv_entry_reschedule_intrpt(&route_table[dest_ip_addr], expi_time);	}    else	{   //printf("Warning @ rt extend intrpt: new expi time is smaller\n");	}}Boolean aodv_rt_lookup_active_entry (Aodv_Route_Table_Stat route_table, int dest_ip_addr){	Boolean result = OPC_FALSE;	Aodv_Route_Table_Entry * entry_ptr;	if(aodv_rt_lookup_entry (route_table, dest_ip_addr) == OPC_TRUE)	{		entry_ptr = aodv_rt_access_entry(route_table,dest_ip_addr);		if( (route_table[dest_ip_addr].hop_count != OPC_INT_INFINITY) && (!route_table[dest_ip_addr].breakage_flag))			result = OPC_TRUE;	}	return result;}Boolean aodv_rt_lookup_fresh_enough_active_entry (Aodv_Route_Table_Stat route_table, int dest_ip_addr, int dest_seq_nb){	Boolean result = OPC_FALSE;	Aodv_Route_Table_Entry * entry_ptr;	if(aodv_rt_lookup_active_entry (route_table, dest_ip_addr) != OPC_FALSE)	{		entry_ptr = aodv_rt_access_entry(route_table,dest_ip_addr);		if(route_table[dest_ip_addr].dest_seq_nb >= dest_seq_nb)			result = OPC_TRUE;	}	return result;}voidaodv_rt_delete_entry (Aodv_Route_Table_Stat route_table, int dest_ip_addr){route_table[dest_ip_addr].entry_exist       = 0;op_prg_mem_free(route_table[dest_ip_addr].list_prec);route_table[dest_ip_addr].list_prec = aodv_list_create();}voidaodv_rt_print (Aodv_Route_Table_Stat route_table, int current_node_ip_addr){	// Vars	Aodv_Route_Table_Entry *   entry_ptr;	int i;		/*	/* Print the routingTable of the current node	*/			// Begin	printf("\n");	printf("\t\t@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");	printf("\t\t|         ROUTING TABLE [node %d]\n", current_node_ip_addr);	printf("\t\t@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\t\t|\n");	// For each entry	     for(i = 0; i < N_MAX; i++)	       {		 //if(route_table[i].entry_exist)			  // {				aodv_entry_print(&route_table[i], current_node_ip_addr);				 printf("\t\t@@@@@@\n\t\t@@@@@@\n");			   //}	       }	printf("\t\t@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n");}

⌨️ 快捷键说明

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