#include <LifetimeChurn.h>

Public Member Functions | |
| void | handleMessage (cMessage *msg) |
| void | initializeChurn () |
| LifetimeChurn () | |
| ~LifetimeChurn () | |
Protected Member Functions | |
| void | updateDisplayString () |
| void | createNode (simtime_t lifetime, bool initialize) |
| void | deleteNode (TransportAddress &addr) |
| double | distributionFunction () |
| void | scheduleCreateNodeAt (simtime_t creationTime, simtime_t lifetime) |
Private Attributes | |
| GlobalStatistics * | globalStatistics |
| double | initialMean |
| mean of update interval during initialization phase | |
| double | initialDeviation |
| deviation of update interval during initialization phase | |
| double | targetMean |
| mean of update interval after initialization phase | |
| std::string | lifetimeDistName |
| name of the distribution function | |
| double | lifetimeMean |
| mean node lifetime | |
| double | lifetimeDistPar1 |
| distribution function parameter | |
| cMessage * | initFinishedTimer |
| timer to signal end of init phase | |
| simtime_t | lastCreate |
| simtime_t | lastDelete |
Definition at line 36 of file LifetimeChurn.h.
| LifetimeChurn::LifetimeChurn | ( | ) | [inline] |
| LifetimeChurn::~LifetimeChurn | ( | ) |
Definition at line 168 of file LifetimeChurn.cc.
00169 { 00170 cancelAndDelete(initFinishedTimer); 00171 }
| void LifetimeChurn::createNode | ( | simtime_t | lifetime, | |
| bool | initialize | |||
| ) | [protected] |
Definition at line 98 of file LifetimeChurn.cc.
Referenced by handleMessage().
00099 { 00100 00101 ChurnMessage* churnMsg = new ChurnMessage("DeleteNode"); 00102 TransportAddress* ta = underlayConfigurator->createNode(type, initialize); 00103 churnMsg->setAddr(*ta); 00104 delete ta; 00105 churnMsg->setCreateNode(false); 00106 scheduleAt(std::max(simTime(), simTime() + lifetime 00107 - underlayConfigurator->getGracefulLeaveDelay()), churnMsg); 00108 00109 RECORD_STATS(globalStatistics->recordOutVector( 00110 "LifetimeChurn: Session Time", SIMTIME_DBL(lifetime))); 00111 RECORD_STATS(globalStatistics->recordOutVector( 00112 "LifetimeChurn: Time between creates", 00113 SIMTIME_DBL(simTime() - lastCreate))); 00114 00115 lastCreate = simTime(); 00116 }
| void LifetimeChurn::deleteNode | ( | TransportAddress & | addr | ) | [protected] |
Definition at line 118 of file LifetimeChurn.cc.
Referenced by handleMessage().
00119 { 00120 underlayConfigurator->preKillNode(NodeType(), &addr); 00121 00122 scheduleCreateNodeAt(simTime() + distributionFunction(), 00123 distributionFunction()); 00124 00125 RECORD_STATS(globalStatistics->recordOutVector( 00126 "LifetimeChurn: Time between deletes", 00127 SIMTIME_DBL(simTime() - lastDelete))); 00128 00129 lastDelete = simTime(); 00130 }
| double LifetimeChurn::distributionFunction | ( | ) | [protected] |
Definition at line 140 of file LifetimeChurn.cc.
Referenced by deleteNode(), and initializeChurn().
00141 { 00142 double par; 00143 00144 if (lifetimeDistName == "weibull") { 00145 par = lifetimeMean / tgamma(1 + (1 / lifetimeDistPar1)); 00146 return weibull(par, lifetimeDistPar1); 00147 } else if (lifetimeDistName == "pareto_shifted") { 00148 par = lifetimeMean * (lifetimeDistPar1 - 1) / lifetimeDistPar1; 00149 return pareto_shifted(lifetimeDistPar1, par, 0); 00150 } else if (lifetimeDistName == "truncnormal") { 00151 par = lifetimeMean; 00152 return truncnormal(par, par/3.0); 00153 } else { 00154 opp_error("LifetimeChurn::distribution function: Invalid value " 00155 "for parameter lifetimeDistName!"); 00156 } 00157 00158 return 0; 00159 }
| void LifetimeChurn::handleMessage | ( | cMessage * | msg | ) | [virtual] |
Implements ChurnGenerator.
Definition at line 71 of file LifetimeChurn.cc.
00072 { 00073 if (!msg->isSelfMessage()) { 00074 delete msg; 00075 return; 00076 } 00077 00078 // init phase finished 00079 if (msg == initFinishedTimer) { 00080 underlayConfigurator->initFinished(); 00081 cancelEvent(initFinishedTimer); 00082 delete initFinishedTimer; 00083 initFinishedTimer = NULL; 00084 return; 00085 } 00086 00087 ChurnMessage* churnMsg = check_and_cast<ChurnMessage*> (msg); 00088 00089 if (churnMsg->getCreateNode() == true) { 00090 createNode(churnMsg->getLifetime(), false); 00091 } else { 00092 deleteNode(churnMsg->getAddr()); 00093 } 00094 00095 delete msg; 00096 }
| void LifetimeChurn::initializeChurn | ( | ) | [virtual] |
Implements ChurnGenerator.
Definition at line 34 of file LifetimeChurn.cc.
00035 { 00036 Enter_Method_Silent(); 00037 00038 initialMean = par("initPhaseCreationInterval"); 00039 initialDeviation = initialMean / 3; 00040 lifetimeMean = par("lifetimeMean"); 00041 lifetimeDistName = par("lifetimeDistName").stdstringValue(); 00042 lifetimeDistPar1 = par("lifetimeDistPar1"); 00043 00044 WATCH(lifetimeMean); 00045 00046 globalStatistics = GlobalStatisticsAccess().get(); 00047 00048 lastCreate = lastDelete = simTime(); 00049 00050 simtime_t initFinishedTime = initialMean * targetOverlayTerminalNum; 00051 00052 // create the remaining nodes in bootstrap phase 00053 int targetOverlayTerminalNum = par("targetOverlayTerminalNum"); 00054 for (int i = 0; i < targetOverlayTerminalNum; i++) { 00055 00056 scheduleCreateNodeAt(truncnormal(initialMean * i, initialDeviation), 00057 initFinishedTime + distributionFunction() 00058 - truncnormal(initialMean * i, 00059 initialDeviation)); 00060 00061 // create same number of currently dead nodes 00062 scheduleCreateNodeAt(initFinishedTime + distributionFunction(), 00063 distributionFunction()); 00064 } 00065 00066 initFinishedTimer = new cMessage("initFinishedTimer"); 00067 00068 scheduleAt(initFinishedTime, initFinishedTimer); 00069 }
| void LifetimeChurn::scheduleCreateNodeAt | ( | simtime_t | creationTime, | |
| simtime_t | lifetime | |||
| ) | [protected] |
Definition at line 132 of file LifetimeChurn.cc.
Referenced by deleteNode(), and initializeChurn().
00133 { 00134 ChurnMessage* churnMsg = new ChurnMessage("CreateNode"); 00135 churnMsg->setCreateNode(true); 00136 churnMsg->setLifetime(SIMTIME_DBL(lifetime)); 00137 scheduleAt(creationTime, churnMsg); 00138 }
| void LifetimeChurn::updateDisplayString | ( | ) | [protected, virtual] |
Implements ChurnGenerator.
Definition at line 161 of file LifetimeChurn.cc.
00162 { 00163 char buf[80]; 00164 sprintf(buf, "lifetime churn"); 00165 getDisplayString().setTagArg("t", 0, buf); 00166 }
GlobalStatistics* LifetimeChurn::globalStatistics [private] |
Definition at line 52 of file LifetimeChurn.h.
Referenced by createNode(), deleteNode(), and initializeChurn().
cMessage* LifetimeChurn::initFinishedTimer [private] |
timer to signal end of init phase
Definition at line 61 of file LifetimeChurn.h.
Referenced by handleMessage(), initializeChurn(), LifetimeChurn(), and ~LifetimeChurn().
double LifetimeChurn::initialDeviation [private] |
deviation of update interval during initialization phase
Definition at line 55 of file LifetimeChurn.h.
Referenced by initializeChurn().
double LifetimeChurn::initialMean [private] |
mean of update interval during initialization phase
Definition at line 54 of file LifetimeChurn.h.
Referenced by initializeChurn().
simtime_t LifetimeChurn::lastCreate [private] |
simtime_t LifetimeChurn::lastDelete [private] |
std::string LifetimeChurn::lifetimeDistName [private] |
name of the distribution function
Definition at line 57 of file LifetimeChurn.h.
Referenced by distributionFunction(), and initializeChurn().
double LifetimeChurn::lifetimeDistPar1 [private] |
distribution function parameter
Definition at line 59 of file LifetimeChurn.h.
Referenced by distributionFunction(), and initializeChurn().
double LifetimeChurn::lifetimeMean [private] |
mean node lifetime
Definition at line 58 of file LifetimeChurn.h.
Referenced by distributionFunction(), and initializeChurn().
double LifetimeChurn::targetMean [private] |
1.5.8