Hi all
I want to attach a udp agent to a node through my agent .c code. I used from
following code. But I have a problem. I have two segment code that are similar
completely. but when I run it second piece of code cause Segmentation Fault!
error. this error is from shown line of code. Can anybody help me, Please?
It's so Important ans urgent for me!
%%%%%%%%%%%%%%
Tcl& tcl = Tcl::instance();
char * Source;
char * Destination;
char * Name;
//get Source & Dest node ID & Name
Name=const_cast<char *>(name());
sprintf(tcl.buffer(), "%s set sourcenode_id", Name);
tcl.eval();
assert(*tcl.result());
int sourcenode_id = atoi(tcl.result());
Source=const_cast<char *>(tcl.result());
Node *SourceNode=Node::get_node_by_address(sourcenode_id);
char *SAddr=const_cast<char *>(SourceNode->name()); // //runs
successfully
cout << "Get SADDR :" << SAddr << "\n" ;
//// Dest
Name=const_cast<char *>(name());
sprintf(tcl.buffer(), "%s set destnode_id", Name);
tcl.eval();
assert(*tcl.result());
int destnode_id = atoi(tcl.result());
Destination=const_cast<char *>(tcl.result()); // I checked it, I have
the node ID now
Node *DestNode=Node::get_node_by_address(destnode_id); // This line runs
successfully
cout << "Get Dest Node \n ";
char *DAddr=const_cast<char *>(DestNode->name()); //this line causes
ERROR
cout << "Get DADDR :" << DAddr << "\n" ;
// from now code is true and runs successfully
//get Simulator instance name
tcl.evalf("Simulator instance");
char simName[32];
strncpy(simName, tcl.result(), 32);
cout << "Get Simulator instance \n" ;
//UDP Source
tcl.eval("set udp1 [new Agent/UDP]");
assert(*tcl.result());
char *Udp_Agent=const_cast<char *>(tcl.result());
cout << Udp_Agent;
printf("%s attach-agent %s %s \n",simName,SAddr,Udp_Agent);
sprintf(tcl.buffer(), "%s attach-agent %s %s",simName,SAddr,Udp_Agent);
tcl.eval();
//UDP Sink
tcl.eval("set null [new Agent/Null]");
assert(*tcl.result());
char *Null_Agent=const_cast<char *>(tcl.result());
printf("%s attach-agent %s %s",simName,DAddr,Null_Agent);
sprintf(tcl.buffer(), "%s attach-agent %s %s",simName,DAddr,Null_Agent);
tcl.eval();
//connect source to sink
printf("%s connect %s %s",simName,Udp_Agent,Null_Agent);
sprintf(tcl.buffer(), "%s connect %s %s",simName,Udp_Agent,Null_Agent);
tcl.eval();
cout << "Connect UDP to SINK \n" ;
//CBR App.
tcl.eval("set cbr1 [new Application/Traffic/CBR]");
assert(*tcl.result());
char *CBR=const_cast<char *>(tcl.result());
sprintf(tcl.buffer(), "%s attach-agent %s ",CBR,Udp_Agent);
tcl.eval();
sprintf(tcl.buffer(), "%s set PacketSize_ 1000",CBR);
tcl.eval();
sprintf(tcl.buffer(), "%s set rate_ 0.01Mb",CBR);
tcl.eval();
cout << "before CBR start \n";
sprintf(tcl.buffer(), "%s at-now \"%s start\" ",simName,CBR);
tcl.eval();