📄 aodv_utils.ex.c
字号:
/** Aodv_Utils.ex.c **//****************************************//* Written *//* by *//* Lyes Guemari *//* *//* National Inst. of Stands & Tech *//* Washington, D.C., U.S.A. *//****************************************//** Include directives **/#include "Aodv_Utils.h"#include "Aodv_List.h"#include <string.h>/******************************/* Prints an aodv format packet*******************************/void aodv_pk_print(Packet* pk_ptr, int trace_level) { int ttl, n_flag, g_flag,pkType,next_hop, previousHop,src,dest, hopCount,origin; char nextHop[12]; double lifetime, broadcastID; int destSeqNb, srcSeqNb; Aodv_List * lost_node_list; int DEBUG; char msg[80]; // var init op_ima_obj_attr_get(op_topo_parent (op_id_self()), "DEBUG", &DEBUG); // Begin if(DEBUG >= trace_level) { aodv_print_minor("Printing packet:", trace_level); // get the type of the packet op_pk_nfd_get(pk_ptr,"Type" ,&pkType); op_pk_nfd_get(pk_ptr,"NextHop" ,&next_hop); op_pk_nfd_get(pk_ptr,"PreviousHop",&previousHop); if(next_hop != BROADCAST) sprintf(nextHop,"%d", next_hop); else sprintf(nextHop,"broadcast"); switch(pkType) { case DATA_PK_TYPE: // DATA { op_pk_nfd_get(pk_ptr,"Source",&src); op_pk_nfd_get(pk_ptr,"Dest" ,&dest); op_pk_nfd_get(pk_ptr,"HopCount" ,&hopCount); printf("\t\t********************************\n"); printf("\t\t********** DATA Packet *********\n"); printf("\t\t********************************\n"); sprintf(msg,"* From = %d",previousHop);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* To = %s",nextHop);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); sprintf(msg,"* Hop Count = %d",hopCount);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); sprintf(msg,"* Source = %d",src);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* Destination = %d",dest);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); break; } case RREQ_PK_TYPE: // RREQ received { op_pk_nfd_get(pk_ptr,"TTL" ,&ttl); op_pk_nfd_get(pk_ptr,"Source" ,&src); op_pk_nfd_get(pk_ptr,"Dest" ,&dest); op_pk_nfd_get(pk_ptr,"DestSeqNb" ,&destSeqNb); op_pk_nfd_get(pk_ptr,"BroadcastID",&broadcastID); op_pk_nfd_get(pk_ptr,"SrcSeqNb" ,&srcSeqNb); op_pk_nfd_get(pk_ptr,"HopCount" ,&hopCount); printf("\t\t********************************\n"); if(src != dest) printf("\t\t********* REQUEST Packet *******\n"); else printf("\t\t************ HELLO Msg *********\n"); printf("\t\t********************************\n"); sprintf(msg,"* TTL = %d",ttl);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); sprintf(msg,"* From = %d",previousHop);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); sprintf(msg,"* Source = %d",src);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* Destination = %d",dest);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* DestSeqNb = %d",destSeqNb);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* HopCount = %d",hopCount);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* BroadcastID = %d",(int) broadcastID);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* SrcSeqNb = %d",srcSeqNb);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); break; } case RREP_PK_TYPE: // RREP received { op_pk_nfd_get(pk_ptr,"G" ,&g_flag); op_pk_nfd_get(pk_ptr,"Source" ,&src); op_pk_nfd_get(pk_ptr,"Dest" ,&dest); op_pk_nfd_get(pk_ptr,"DestSeqNb" ,&destSeqNb); op_pk_nfd_get(pk_ptr,"HopCount" ,&hopCount); op_pk_nfd_get(pk_ptr,"Lifetime" ,&lifetime); op_pk_nfd_get(pk_ptr,"GeneratingNode" ,&origin); printf("\t\t********************************\n"); if(next_hop == BROADCAST) printf("\t\t************ HELLO Msg *********\n"); else if(!g_flag) printf("\t\t********** REPLY Packet ********\n"); else printf("\t\t** GRATUITOUS REPLY Packet **\n"); printf("\t\t********************************\n"); sprintf(msg,"* By = %d",origin);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); sprintf(msg,"* From = %d",previousHop);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* To = %s",nextHop);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); sprintf(msg,"* Source = %d",src);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* Destination = %d",dest);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* DestSeqNb = %d",destSeqNb);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* HopCount = %d",hopCount);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); sprintf(msg,"* Lifetime = %d",(int) lifetime);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); break; } case RERR_PK_TYPE: // RERR received { printf("\t\t********************************\n"); printf("\t\t********** ERROR Packet ********\n"); printf("\t\t********************************\n"); sprintf(msg,"* From = %d",previousHop);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); op_pk_nfd_access(pk_ptr,"N",&n_flag); sprintf(msg,"* N = %d",n_flag);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); printf("\t\t********************************\n"); op_pk_nfd_access(pk_ptr,"Payload",&lost_node_list); aodv_lost_node_list_print(lost_node_list); printf("\t\t********************************\n"); break; } } } }/******************************************/* Prints the list of lost nodes contained/* in the RERR packet*******************************************/void aodv_lost_node_list_print(Aodv_List* list) { Aodv_Lost_Node* lost_node; char msg[80]; Aodv_List_Element* current_elem = aodv_list_access_first_element(list); while(current_elem != OPC_NIL) { lost_node = (Aodv_Lost_Node*) current_elem->data; sprintf(msg,"* Dest= %d | SeqNb= %d", lost_node->dest_ip_addr, lost_node->dest_seq_nb);printf("\t\t%s",msg);aodv_justify(strlen(msg), " *", 32); current_elem = aodv_list_access_next(current_elem); } }/******************************************/* Justify msg2 on the right side of the /* screen*******************************************/void aodv_justify(int start,char* msg2,int total){int i;int space_len = total - start - strlen(msg2);for(i = 0; i < space_len;i++) { printf(" "); }printf("%s\n",msg2);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -