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

📄 network.cpp

📁 传感器网络的可靠路由算法
💻 CPP
字号:
#include "stdafx.h"
#include "Network.h"



/* global variables */
NODE_TYPE nodeT[4000];
NETWORK_TYPE net;

//Network Initialization
void NetworkInit(const char * filename)
{	
   char buf[MAX_STRING_LENGTH];
 
   
   FileIO* CFG = new FileIO(filename);


   if( CFG->ReadString("SEED",buf) == false){
	   printf("Miss SEED parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%d",&net.SEED);
		srand(net.SEED);
		//srand( (unsigned)time( NULL ) );
	}

   if( CFG->ReadString("CONFIGURATION-ID",buf) == false){
	   printf("Miss CONFIGURATION-ID parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%d",&net.NET_ID);
	}

	if( CFG->ReadString("NUMBER-OF-NODES",buf) == false){
	   printf("Miss NUMBER-OF-NODES parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%d",&net.NUM_NODES);
	}

	if( CFG->ReadString("TERRIAN_Y",buf) == false){
	   printf("Miss CONFIGURATION-ID parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%lf",&net.TERRIAN_Y);
	}

	if( CFG->ReadString("TERRIAN_X",buf) == false){
	   printf("Miss CONFIGURATION-ID parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%lf",&net.TERRIAN_X);
	}

	if( CFG->ReadString("NODE_PLACEMENT_MODE",buf) == false){
	   printf("Miss PLACEMENT_TYPE parameter in config files\n"); //exit(-1);
	}else {
		if(strcmp(buf,"UNIFORM") == 0 ) net.PLACEMENT_TYPE = UNIFORM; 
		else if(strcmp(buf,"RANDOM") == 0 ) net.PLACEMENT_TYPE =RANDOM; 
		else if(strcmp(buf,"GRID") == 0 ) net.PLACEMENT_TYPE =GRID; 
		else {printf("Error parameter in config files\n"); };
	}

	if( CFG->ReadString("ROUTING-PROTOCOL",buf) == false){
	   printf("Miss PLACEMENT_TYPE parameter in config files\n"); //exit(-1);
	}else {
		if(strcmp(buf,"MH_A") == 0 ) net.ROUTING_TYPE = MH; 
		else if (strcmp(buf,"MH")==0) net.ROUTING_TYPE = MH;
		else if(strcmp(buf,"GF") == 0 ) net.ROUTING_TYPE =GF; 
		else if(strcmp(buf,"DYND") == 0 ) net.ROUTING_TYPE =DYND; 
		else if (strcmp(buf,"GFX")==0) net.ROUTING_TYPE = GFX;
		else {printf("Error ROUTING parameter in config files\n"); //exit(-1);
		};
	}

	if( CFG->ReadString("LINK_COST_MODEL",buf) == false){
	   printf("Miss LINK_COST_MODEL parameter in config files\n"); //exit(-1);
	}else {
		if(strcmp(buf,"ETX") == 0 ) net.LINK_COST_MODEL = ETX; 
		else if(strcmp(buf,"LAZY") == 0 ) net.LINK_COST_MODEL = LAZY; 
		else if(strcmp(buf,"EQUAL") == 0 ) net.LINK_COST_MODEL = EQUAL; 	
		else if(strcmp(buf,"GF_LINK") == 0 ) net.LINK_COST_MODEL = GF_LINK; 		
		else {printf("Error LINK_COST_MODEL parameter in config files\n"); //exit(-1);
		};
	}

	if( CFG->ReadString("LINK_MODEL",buf) == false){
	   printf("Miss LINK_MODEL parameter in config files\n"); //exit(-1);
	}else {
		if(strcmp(buf,"PERFECT") == 0 ) net.LINK_MODEL = PERFECT; 
		else if(strcmp(buf,"REAL_INDEPENDENT") == 0 ) net.LINK_MODEL = REAL_INDEPENDENT; 	
		else if(strcmp(buf,"REAL_DEPENDENT") == 0 ) net.LINK_MODEL = REAL_DEPENDENT; 			
		else {printf("Error LINK_MODEL parameter in config files\n"); //exit(-1);
		};
	}


	if( CFG->ReadString("TRAFFIC_PATTERN",buf) == false){
	   printf("Miss TRAFFIC_PATTERN parameter in config files\n"); //exit(-1);
	}else {
		if(strcmp(buf,"ALL2ONE") == 0 ) net.TRAFFIC_PATTERN = ALL2ONE; 
		else if(strcmp(buf,"MANY2ONE") == 0 ) net.TRAFFIC_PATTERN = MANY2ONE; 
		else if(strcmp(buf,"MANY2MANY") == 0 ) net.TRAFFIC_PATTERN = MANY2MANY; 	
		else if(strcmp(buf,"ONE2MANY") == 0 ) net.TRAFFIC_PATTERN = ONE2MANY; 
		else if(strcmp(buf,"ONE2ONE") == 0 ) net.TRAFFIC_PATTERN = ONE2ONE; 		
		else {printf("Error TRAFFIC_PATTERN parameter in config files\n"); //exit(-1);
		};
	}

	if( CFG->ReadString("DATA_SIZE",buf) == false){
	   printf("Miss DATA_SIZE parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%d",&net.DATA_SIZE);
	}

	if( CFG->ReadString("CTR_SIZE",buf) == false){
	   printf("Miss CTR_SIZE parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%d",&net.CTR_SIZE);
		net.LAMBDA = double(net.CTR_SIZE)/double(net.DATA_SIZE);
	}

	/* power management settings */

	if( CFG->ReadString("PM_ENABLED",buf) == false){
	   printf("Miss PM_ENABLED parameter in config files\n"); //exit(-1);
	}else {
		if(strcmp(buf,"TRUE") == 0 ) net.PM_ENABLED = true; 
		else if(strcmp(buf,"FALSE") == 0 ) net.PM_ENABLED = false; 			
		else {printf("Error PM_ENABLED parameter in config files\n"); //exit(-1);
		};
	}

	if( CFG->ReadString("PM_PERIOD",buf) == false){
	   printf("Miss PM_PERIOD parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%d",&net.PM_PERIOD);
	}

	if( CFG->ReadString("WAKEUP_DURATION",buf) == false){
	   printf("Miss WAKEUP_DURATION parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%d",&net.WAKEUP_DURATION);
	}

	if( CFG->ReadString("BANDWIDTH",buf) == false){
	   printf("Miss BANDWIDTH parameter in config files\n"); //exit(-1);
	}else {
		sscanf(buf,"%d",&net.BANDWIDTH);
	}

	

	if( CFG->ReadString("GUI_PRINTF",buf) == false){
	   printf("Miss GUI_PRINTF parameter in config files\n"); //exit(-1);
	}else {
		if(strcmp(buf,"TRUE") == 0 ) net.GUI_PRINTF = true; 
		else if(strcmp(buf,"FALSE") == 0 ) net.GUI_PRINTF = false; 			
		else {printf("Error GUI_PRINTF parameter in config files\n"); //exit(-1);
		};
	}

	//PrintConfiguration();
}

void  PrintConfiguration(){ 
  printf("NUM_NODES = %d\n",net.NUM_NODES);
  printf("PLACEMENT_TYPE = %d\n",net.PLACEMENT_TYPE);
  printf("ROUTING_TYPE = %d\n",net.ROUTING_TYPE);
  printf("TERRIAN_X = %lf\n",net.TERRIAN_X);
  printf("TERRIAN_Y = %lf\n",net.TERRIAN_Y);
  printf("NET_ID = %d\n",net.NET_ID);
  printf("SEED = %d\n",net.SEED);
  printf("LINK_COST_MODEL = %d\n",net.LINK_COST_MODEL);
  printf("PM_ENABLED = %d\n",net.PM_ENABLED);
  printf("PM_PERIOD = %d\n",net.PM_PERIOD);
  printf("WAKEUP_DURATION = %d\n",net.WAKEUP_DURATION);
}

void  PrintNode(int i ){ 
  printf("Node[%d]: x = %d\n",i,nodeT[i].x);
  printf("Node[%d]: y = %d\n",i,nodeT[i].y);
  printf("Node[%d]: neighbor = %d\n",i,nodeT[i].neighbornum);
  printf("Node[%d]: routingItems = %d\n",i,nodeT[i].rt.numItems);
}

/* initialize node states */
void NodeInit(){
 int i , j ;


 
// nodeT = (NODE_TYPE *) malloc(sizeof(NODE_TYPE)* net.NUM_NODES);
 
 ///if( nodeT == NULL ){ printf( "Insufficient memory available\n" ); } //exit(-1);
 
 for( i = 0; i <  net.NUM_NODES ; i++){
     /* set node position. x,y location should be used in the protocol */
	     nodeT[i].x = (double(rand())/RAND_MAX) * net.TERRIAN_X;
         nodeT[i].y = (double(rand())/RAND_MAX) * net.TERRIAN_Y;

	 /* set neighbor info */
	 for (j=0;j<MAX_NUM_NEIGHBORS;j++){
		  nodeT[i].neighbor[j]= INVALID_ID;
		  nodeT[i].LQI2neighbor[j]= 0;
	 }

     nodeT[i].neighbornum = 0;
     
	 /* initalized for DFS*/
	 nodeT[i].floodsend = 0;
     nodeT[i].inqueue = 0;;
     
	 //destination is invalid
	 nodeT[i].rt.NodeID = i;
	 nodeT[i].rt.numItems = 0;

	 nodeT[i].distantnum = nodeT[i].internum = 0;

	 for (j=0;j<MAX_NUM_NEIGHBORS;j++){
		 nodeT[i].rt.routingItem[j].DenstinationID = INVALID_ID;
		 nodeT[i].rt.routingItem[j].NextHop = INVALID_ID;
		 nodeT[i].rt.routingItem[j].Cost = MAXCOST;     
	 }
	 

 }

 /* put root in the middle of the terrian */
 nodeT[0].x = net.TERRIAN_X/2;
 nodeT[0].y = net.TERRIAN_Y/2;

 

}

⌨️ 快捷键说明

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