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 |
|
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 }
|
|
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 }
|
|
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 }
|
|
00053 {return 2;}
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|