IPTrafGen Class Reference

#include <IPTrafGen.h>

Inheritance diagram for IPTrafGen:

IPTrafSink List of all members.

Detailed Description

IP traffic generator application. See NED for more info.


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< IPvXAddressdestAddresses
int numSent

Static Protected Attributes

static int counter


Member Function Documentation

IPvXAddress IPTrafGen::chooseDestAddr (  )  [protected, virtual]

00126 {
00127     int k = intrand(destAddresses.size());
00128     return destAddresses[k];
00129 }

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 }

virtual int IPTrafGen::numInitStages (  )  const [inline, protected, virtual]

00068 {return 4;}

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 }


Member Data Documentation

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]


The documentation for this class was generated from the following files:
Generated on Wed Apr 4 13:20:21 2007 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.7