#include <IPTrafGen.h>
Inheritance diagram for IPTrafGen:
Protected Member Functions | |
virtual IPvXAddress | chooseDestAddr () |
virtual void | sendPacket () |
virtual int | numInitStages () const |
virtual void | initialize (int stage) |
virtual void | handleMessage (cMessage *msg) |
Protected Attributes | |
std::string | nodeName |
int | protocol |
int | msgByteLength |
int | numPackets |
std::vector< IPvXAddress > | destAddresses |
int | numSent |
Static Protected Attributes | |
static int | counter |
IPvXAddress IPTrafGen::chooseDestAddr | ( | ) | [protected, virtual] |
void IPTrafGen::handleMessage | ( | cMessage * | msg | ) | [protected, virtual] |
Reimplemented from IPTrafSink.
00170 { 00171 if (msg->isSelfMessage()) 00172 { 00173 // send, then reschedule next sending 00174 sendPacket(); 00175 00176 if (numSent<numPackets) 00177 scheduleAt(simTime()+(double)par("packetInterval"), msg); 00178 } 00179 else 00180 { 00181 // process incoming packet 00182 processPacket(msg); 00183 } 00184 00185 if (ev.isGUI()) 00186 { 00187 char buf[40]; 00188 sprintf(buf, "rcvd: %d pks\nsent: %d pks", numReceived, numSent); 00189 displayString().setTagArg("t",0,buf); 00190 } 00191 }
void IPTrafGen::initialize | ( | int | stage | ) | [protected, virtual] |
00094 { 00095 // because of IPAddressResolver, we need to wait until interfaces are registered, 00096 // address auto-assignment takes place etc. 00097 if (stage!=3) 00098 return; 00099 00100 IPTrafSink::initialize(); 00101 00102 protocol = par("protocol"); 00103 msgByteLength = par("packetLength"); 00104 numPackets = par("numPackets"); 00105 simtime_t startTime = par("startTime"); 00106 00107 const char *destAddrs = par("destAddresses"); 00108 cStringTokenizer tokenizer(destAddrs); 00109 const char *token; 00110 while ((token = tokenizer.nextToken())!=NULL) 00111 destAddresses.push_back(IPAddressResolver().resolve(token)); 00112 00113 counter = 0; 00114 00115 numSent = 0; 00116 WATCH(numSent); 00117 00118 if (destAddresses.empty()) 00119 return; 00120 00121 cMessage *timer = new cMessage("sendTimer"); 00122 scheduleAt(startTime, timer); 00123 }
void IPTrafGen::sendPacket | ( | ) | [protected, virtual] |
00132 { 00133 char msgName[32]; 00134 sprintf(msgName,"appData-%d", counter++); 00135 00136 cMessage *payload = new cMessage(msgName); 00137 payload->setByteLength(msgByteLength); 00138 00139 IPvXAddress destAddr = chooseDestAddr(); 00140 if (!destAddr.isIPv6()) 00141 { 00142 // send to IPv4 00143 IPControlInfo *controlInfo = new IPControlInfo(); 00144 controlInfo->setDestAddr(destAddr.get4()); 00145 controlInfo->setProtocol(protocol); 00146 payload->setControlInfo(controlInfo); 00147 00148 EV << "Sending packet: "; 00149 printPacket(payload); 00150 00151 send(payload, "to_ip"); 00152 } 00153 else 00154 { 00155 // send to IPv6 00156 IPv6ControlInfo *controlInfo = new IPv6ControlInfo(); 00157 controlInfo->setDestAddr(destAddr.get6()); 00158 controlInfo->setProtocol(protocol); 00159 payload->setControlInfo(controlInfo); 00160 00161 EV << "Sending packet: "; 00162 printPacket(payload); 00163 00164 send(payload, "to_ipv6"); 00165 } 00166 numSent++; 00167 }
int IPTrafGen::counter [static, protected] |
std::vector<IPvXAddress> IPTrafGen::destAddresses [protected] |
int IPTrafGen::msgByteLength [protected] |
std::string IPTrafGen::nodeName [protected] |
int IPTrafGen::numPackets [protected] |
int IPTrafGen::numSent [protected] |
int IPTrafGen::protocol [protected] |