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

📄 aodv_utils.ex.c

📁 在OPNET中实现AODV路由协议
💻 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 + -