#include <EtherAppSrv.h>
Protected Member Functions | |
virtual void | initialize () |
virtual void | handleMessage (cMessage *msg) |
virtual void | finish () |
void | registerDSAP (int dsap) |
void | sendPacket (cMessage *datapacket, const MACAddress &destAddr) |
Protected Attributes | |
int | localSAP |
int | remoteSAP |
long | packetsSent |
long | packetsReceived |
cOutVector | eedVector |
cStdDev | eedStats |
void EtherAppSrv::initialize | ( | ) | [protected, virtual] |
00027 { 00028 localSAP = ETHERAPP_SRV_SAP; 00029 remoteSAP = ETHERAPP_CLI_SAP; 00030 00031 // statistics 00032 packetsSent = packetsReceived = 0; 00033 eedVector.setName("end-to-end delay"); 00034 eedStats.setName("end-to-end delay"); 00035 WATCH(packetsSent); 00036 WATCH(packetsReceived); 00037 00038 bool registerSAP = par("registerSAP"); 00039 if (registerSAP) 00040 registerDSAP(localSAP); 00041 }
void EtherAppSrv::handleMessage | ( | cMessage * | msg | ) | [protected, virtual] |
00044 { 00045 EV << "Received packet `" << msg->getName() << "'\n"; 00046 00047 packetsReceived++; 00048 simtime_t lastEED = simTime() - msg->getCreationTime(); 00049 eedVector.record(lastEED); 00050 eedStats.collect(lastEED); 00051 00052 EtherAppReq *req = check_and_cast<EtherAppReq *>(msg); 00053 Ieee802Ctrl *ctrl = check_and_cast<Ieee802Ctrl *>(req->removeControlInfo()); 00054 MACAddress srcAddr = ctrl->getSrc(); 00055 long requestId = req->getRequestId(); 00056 long replyBytes = req->getResponseBytes(); 00057 char msgname[30]; 00058 strcpy(msgname,msg->getName()); 00059 00060 delete msg; 00061 delete ctrl; 00062 00063 // send back packets asked by EtherAppCli side 00064 int k = 0; 00065 strcat(msgname,"-resp-"); 00066 char *s = msgname+strlen(msgname); 00067 while (replyBytes>0) 00068 { 00069 int l = replyBytes>MAX_REPLY_CHUNK_SIZE ? MAX_REPLY_CHUNK_SIZE : replyBytes; 00070 replyBytes -= l; 00071 00072 sprintf(s,"%d",k); 00073 00074 EV << "Generating packet `" << msgname << "'\n"; 00075 00076 EtherAppResp *datapacket = new EtherAppResp(msgname, IEEE802CTRL_DATA); 00077 datapacket->setRequestId(requestId); 00078 datapacket->setByteLength(l); 00079 sendPacket(datapacket, srcAddr); 00080 packetsSent++; 00081 00082 k++; 00083 } 00084 00085 }
void EtherAppSrv::finish | ( | ) | [protected, virtual] |
00110 { 00111 recordScalar("packets sent", packetsSent); 00112 recordScalar("packets rcvd", packetsReceived); 00113 recordScalar("end-to-end delay mean", eedStats.getMean()); 00114 recordScalar("end-to-end delay stddev", eedStats.getStddev()); 00115 recordScalar("end-to-end delay min", eedStats.getMin()); 00116 recordScalar("end-to-end delay max", eedStats.getMax()); 00117 }
void EtherAppSrv::registerDSAP | ( | int | dsap | ) | [protected] |
Referenced by initialize().
00098 { 00099 EV << getFullPath() << " registering DSAP " << dsap << "\n"; 00100 00101 Ieee802Ctrl *etherctrl = new Ieee802Ctrl(); 00102 etherctrl->setDsap(dsap); 00103 cMessage *msg = new cMessage("register_DSAP", IEEE802CTRL_REGISTER_DSAP); 00104 msg->setControlInfo(etherctrl); 00105 00106 send(msg, "out"); 00107 }
void EtherAppSrv::sendPacket | ( | cMessage * | datapacket, | |
const MACAddress & | destAddr | |||
) | [protected] |
Referenced by handleMessage().
00088 { 00089 Ieee802Ctrl *etherctrl = new Ieee802Ctrl(); 00090 etherctrl->setSsap(localSAP); 00091 etherctrl->setDsap(remoteSAP); 00092 etherctrl->setDest(destAddr); 00093 datapacket->setControlInfo(etherctrl); 00094 send(datapacket, "out"); 00095 }
int EtherAppSrv::localSAP [protected] |
Referenced by initialize(), and sendPacket().
int EtherAppSrv::remoteSAP [protected] |
Referenced by initialize(), and sendPacket().
long EtherAppSrv::packetsSent [protected] |
Referenced by finish(), handleMessage(), and initialize().
long EtherAppSrv::packetsReceived [protected] |
Referenced by finish(), handleMessage(), and initialize().
cOutVector EtherAppSrv::eedVector [protected] |
Referenced by handleMessage(), and initialize().
cStdDev EtherAppSrv::eedStats [protected] |
Referenced by finish(), handleMessage(), and initialize().