EtherAppCli Class Reference

List of all members.

Detailed Description

Simple traffic generator for the Ethernet model.


Protected Member Functions

virtual void initialize (int stage)
virtual int numInitStages () const
virtual void handleMessage (cMessage *msg)
virtual void finish ()
MACAddress resolveDestMACAddress ()
void sendPacket ()
void receivePacket (cMessage *msg)
void registerDSAP (int dsap)

Private Attributes

long seqNum
cPar * reqLength
cPar * respLength
cPar * waitTime
int localSAP
int remoteSAP
MACAddress destMACAddress
long packetsSent
long packetsReceived
cOutVector eedVector
cStdDev eedStats


Member Function Documentation

void EtherAppCli::finish (  )  [protected, virtual]

00197 {
00198     if (par("writeScalars").boolValue())
00199     {
00200         recordScalar("packets sent", packetsSent);
00201         recordScalar("packets rcvd", packetsReceived);
00202         recordScalar("end-to-end delay mean", eedStats.mean());
00203         recordScalar("end-to-end delay stddev", eedStats.stddev());
00204         recordScalar("end-to-end delay min", eedStats.min());
00205         recordScalar("end-to-end delay max", eedStats.max());
00206     }
00207 }

void EtherAppCli::handleMessage ( cMessage *  msg  )  [protected, virtual]

00131 {
00132     if (msg->isSelfMessage())
00133     {
00134         sendPacket();
00135         double d = waitTime->doubleValue();
00136         scheduleAt(simTime()+d, msg);
00137     }
00138     else
00139     {
00140         receivePacket(msg);
00141     }
00142 }

void EtherAppCli::initialize ( int  stage  )  [protected, virtual]

00067 {
00068     // we can only initialize in the 2nd stage (stage 1), because
00069     // assignment of "auto" MAC addresses takes place in stage 0
00070     if (stage!=1) return;
00071 
00072     reqLength = &par("reqLength");
00073     respLength = &par("respLength");
00074     waitTime = &par("waitTime");
00075 
00076     localSAP = ETHERAPP_CLI_SAP;
00077     remoteSAP = ETHERAPP_SRV_SAP;
00078 
00079     seqNum = 0;
00080     WATCH(seqNum);
00081 
00082     // statistics
00083     packetsSent = packetsReceived = 0;
00084     eedVector.setName("end-to-end delay");
00085     eedStats.setName("end-to-end delay");
00086     WATCH(packetsSent);
00087     WATCH(packetsReceived);
00088 
00089     destMACAddress = resolveDestMACAddress();
00090 
00091     // if no dest address given, nothing to do
00092     if (destMACAddress.isUnspecified())
00093         return;
00094 
00095     bool registerSAP = par("registerSAP");
00096     if (registerSAP)
00097         registerDSAP(localSAP);
00098 
00099     cMessage *timermsg = new cMessage("generateNextPacket");
00100     double d = waitTime->doubleValue();
00101     scheduleAt(simTime()+d, timermsg);
00102 
00103 }

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

00053 {return 2;}

void EtherAppCli::receivePacket ( cMessage *  msg  )  [protected]

00185 {
00186     EV << "Received packet `" << msg->name() << "'\n";
00187 
00188     packetsReceived++;
00189     simtime_t lastEED = simTime() - msg->creationTime();
00190     eedVector.record(lastEED);
00191     eedStats.collect(lastEED);
00192 
00193     delete msg;
00194 }

void EtherAppCli::registerDSAP ( int  dsap  )  [protected]

00145 {
00146     EV << fullPath() << " registering DSAP " << dsap << "\n";
00147 
00148     Ieee802Ctrl *etherctrl = new Ieee802Ctrl();
00149     etherctrl->setDsap(dsap);
00150     cMessage *msg = new cMessage("register_DSAP", IEEE802CTRL_REGISTER_DSAP);
00151     msg->setControlInfo(etherctrl);
00152 
00153     send(msg, "out");
00154 }

MACAddress EtherAppCli::resolveDestMACAddress (  )  [protected]

00107 {
00108     MACAddress destMACAddress;
00109     const char *destAddr = par("destAddress");
00110     const char *destStation = par("destStation");
00111     if (strcmp(destAddr,"") && strcmp(destStation,""))
00112     {
00113         error("only one of the `destAddress' and `destStation' module parameters should be filled in");
00114     }
00115     else if (strcmp(destAddr,""))
00116     {
00117         destMACAddress.setAddress(destAddr);
00118     }
00119     else if (strcmp(destStation,""))
00120     {
00121         std::string destModName = std::string(destStation) + ".mac";
00122         cModule *destMod = simulation.moduleByPath(destModName.c_str());
00123         if (!destMod)
00124             error("module `%s' (MAC submodule of `destStation') not found", destModName.c_str());
00125         destMACAddress.setAddress(destMod->par("address"));
00126     }
00127     return destMACAddress;
00128 }

void EtherAppCli::sendPacket (  )  [protected]

00157 {
00158     seqNum++;
00159 
00160     char msgname[30];
00161     sprintf(msgname, "req-%d-%ld", id(), seqNum);
00162     EV << "Generating packet `" << msgname << "'\n";
00163 
00164     EtherAppReq *datapacket = new EtherAppReq(msgname, IEEE802CTRL_DATA);
00165 
00166     datapacket->setRequestId(seqNum);
00167 
00168     long len = reqLength->longValue();
00169     datapacket->setByteLength(len);
00170 
00171     long respLen = respLength->longValue();
00172     datapacket->setResponseBytes(respLen);
00173 
00174     Ieee802Ctrl *etherctrl = new Ieee802Ctrl();
00175     etherctrl->setSsap(localSAP);
00176     etherctrl->setDsap(remoteSAP);
00177     etherctrl->setDest(destMACAddress);
00178     datapacket->setControlInfo(etherctrl);
00179 
00180     send(datapacket, "out");
00181     packetsSent++;
00182 }


Member Data Documentation

MACAddress EtherAppCli::destMACAddress [private]

cStdDev EtherAppCli::eedStats [private]

cOutVector EtherAppCli::eedVector [private]

int EtherAppCli::localSAP [private]

long EtherAppCli::packetsReceived [private]

long EtherAppCli::packetsSent [private]

int EtherAppCli::remoteSAP [private]

cPar* EtherAppCli::reqLength [private]

cPar* EtherAppCli::respLength [private]

long EtherAppCli::seqNum [private]

cPar* EtherAppCli::waitTime [private]


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