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 |
|
00195 { 00196 if (par("writeScalars").boolValue()) 00197 { 00198 recordScalar("packets sent", packetsSent); 00199 recordScalar("packets rcvd", packetsReceived); 00200 recordScalar("end-to-end delay mean", eedStats.mean()); 00201 recordScalar("end-to-end delay stddev", eedStats.stddev()); 00202 recordScalar("end-to-end delay min", eedStats.min()); 00203 recordScalar("end-to-end delay max", eedStats.max()); 00204 } 00205 }
|
|
00129 { 00130 if (msg->isSelfMessage()) 00131 { 00132 sendPacket(); 00133 double d = waitTime->doubleValue(); 00134 scheduleAt(simTime()+d, msg); 00135 } 00136 else 00137 { 00138 receivePacket(msg); 00139 } 00140 }
|
|
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 registerDSAP(localSAP); 00096 00097 cMessage *timermsg = new cMessage("generateNextPacket"); 00098 double d = waitTime->doubleValue(); 00099 scheduleAt(simTime()+d, timermsg); 00100 00101 }
|
|
00053 {return 2;}
|
|
00183 { 00184 EV << "Received packet `" << msg->name() << "'\n"; 00185 00186 packetsReceived++; 00187 simtime_t lastEED = simTime() - msg->creationTime(); 00188 eedVector.record(lastEED); 00189 eedStats.collect(lastEED); 00190 00191 delete msg; 00192 }
|
|
00143 { 00144 EV << fullPath() << " registering DSAP " << dsap << "\n"; 00145 00146 Ieee802Ctrl *etherctrl = new Ieee802Ctrl(); 00147 etherctrl->setDsap(dsap); 00148 cMessage *msg = new cMessage("register_DSAP", IEEE802CTRL_REGISTER_DSAP); 00149 msg->setControlInfo(etherctrl); 00150 00151 send(msg, "out"); 00152 }
|
|
00105 { 00106 MACAddress destMACAddress; 00107 const char *destAddr = par("destAddress"); 00108 const char *destStation = par("destStation"); 00109 if (strcmp(destAddr,"") && strcmp(destStation,"")) 00110 { 00111 error("only one of the `destAddress' and `destStation' module parameters should be filled in"); 00112 } 00113 else if (strcmp(destAddr,"")) 00114 { 00115 destMACAddress.setAddress(destAddr); 00116 } 00117 else if (strcmp(destStation,"")) 00118 { 00119 std::string destModName = std::string(destStation) + ".mac"; 00120 cModule *destMod = simulation.moduleByPath(destModName.c_str()); 00121 if (!destMod) 00122 error("module `%s' (MAC submodule of `destStation') not found", destModName.c_str()); 00123 destMACAddress.setAddress(destMod->par("address")); 00124 } 00125 return destMACAddress; 00126 }
|
|
00155 { 00156 seqNum++; 00157 00158 char msgname[30]; 00159 sprintf(msgname, "req-%d-%ld", id(), seqNum); 00160 EV << "Generating packet `" << msgname << "'\n"; 00161 00162 EtherAppReq *datapacket = new EtherAppReq(msgname, IEEE802CTRL_DATA); 00163 00164 datapacket->setRequestId(seqNum); 00165 00166 long len = reqLength->longValue(); 00167 datapacket->setByteLength(len); 00168 00169 long respLen = respLength->longValue(); 00170 datapacket->setResponseBytes(respLen); 00171 00172 Ieee802Ctrl *etherctrl = new Ieee802Ctrl(); 00173 etherctrl->setSsap(localSAP); 00174 etherctrl->setDsap(remoteSAP); 00175 etherctrl->setDest(destMACAddress); 00176 datapacket->setControlInfo(etherctrl); 00177 00178 send(datapacket, "out"); 00179 packetsSent++; 00180 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|