📄 aodv_route_table_stat.ex.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 + -