📄 network.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 + -