Random churn generating class. More...
#include <RandomChurn.h>
Public Member Functions | |
void | handleMessage (cMessage *msg) |
void | initializeChurn () |
~RandomChurn () | |
Protected Member Functions | |
void | updateDisplayString () |
Private Attributes | |
double | creationProbability |
probability of creating a new overlay terminal | |
double | migrationProbability |
probability of migrating an overlay terminal | |
double | removalProbability |
probability of removing an overlay terminal | |
double | initialMean |
mean of update interval during initalization phase | |
double | initialDeviation |
deviation of update interval during initalization phase | |
double | targetMean |
mean of update interval after initalization phase | |
double | targetOverlayTerminalNum |
number of created terminals after init phase | |
cMessage * | churnTimer |
message to change the churn rate | |
cMessage * | mobilityTimer |
message to schedule events | |
bool | churnIntervalChanged |
indicates if targetMean changed. | |
double | churnChangeInterval |
churn change interval | |
bool | initAddMoreTerminals |
true, if we're still adding more terminals in the init phase | |
GlobalStatistics * | globalStatistics |
Random churn generating class.
Definition at line 33 of file RandomChurn.h.
RandomChurn::~RandomChurn | ( | ) |
Definition at line 133 of file RandomChurn.cc.
00133 { 00134 // destroy self timer messages 00135 cancelAndDelete(churnTimer); 00136 cancelAndDelete(mobilityTimer); 00137 }
void RandomChurn::handleMessage | ( | cMessage * | msg | ) | [virtual] |
Implements ChurnGenerator.
Definition at line 66 of file RandomChurn.cc.
00067 { 00068 if (!msg->isSelfMessage()) { 00069 delete msg; 00070 return; 00071 } 00072 00073 if (msg == churnTimer) { 00074 cancelEvent(churnTimer); 00075 scheduleAt(simTime() + churnChangeInterval, churnTimer); 00076 if (churnIntervalChanged) { 00077 targetMean = par("targetMobilityDelay"); 00078 churnIntervalChanged = false; 00079 } 00080 else { 00081 targetMean = par("targetMobilityDelay2"); 00082 churnIntervalChanged = true; 00083 } 00084 std::stringstream temp; 00085 temp << "Churn-rate changed to " << targetMean; 00086 bubble(temp.str().c_str()); 00087 } else if (msg == mobilityTimer) { 00088 if (initAddMoreTerminals) { 00089 // increase the number of nodes steadily during setup 00090 if (terminalCount < targetOverlayTerminalNum) { 00091 TransportAddress* ta = underlayConfigurator->createNode(type); 00092 delete ta; // Address not needed in this churn model 00093 } 00094 00095 if (terminalCount >= targetOverlayTerminalNum) { 00096 initAddMoreTerminals = false; 00097 underlayConfigurator->initFinished(); 00098 } 00099 scheduleAt(simTime() 00100 + truncnormal(initialMean, initialDeviation), msg); 00101 } 00102 else { 00103 double random = uniform(0, 1); 00104 00105 // modify the number of nodes according to user parameters 00106 if (random < creationProbability) { 00107 TransportAddress* ta = underlayConfigurator->createNode(type); 00108 delete ta; // Address not needed in this churn model 00109 } else if (creationProbability <= random && 00110 random < creationProbability + removalProbability && 00111 terminalCount > 1) { 00112 int oldTerminalCount = terminalCount; 00113 underlayConfigurator->preKillNode(type); 00114 assert ((oldTerminalCount - 1) == terminalCount); 00115 } else if (creationProbability + removalProbability <= random && 00116 random < creationProbability + removalProbability 00117 + migrationProbability && terminalCount > 1) { 00118 underlayConfigurator->migrateNode(type); 00119 } 00120 scheduleAt(simTime() 00121 + truncnormal(targetMean, targetMean / 3), msg); 00122 } 00123 } 00124 }
void RandomChurn::initializeChurn | ( | ) | [virtual] |
Implements ChurnGenerator.
Definition at line 35 of file RandomChurn.cc.
00036 { 00037 Enter_Method_Silent(); 00038 00039 creationProbability = par("creationProbability"); 00040 migrationProbability = par("migrationProbability"); 00041 removalProbability = par("removalProbability"); 00042 initialMean = par("initPhaseCreationInterval"); 00043 initialDeviation = initialMean / 3; 00044 targetMean = par("targetMobilityDelay"); 00045 targetOverlayTerminalNum = par("targetOverlayTerminalNum"); 00046 WATCH(targetMean); 00047 00048 churnTimer = NULL; 00049 churnIntervalChanged = false; 00050 churnChangeInterval = par("churnChangeInterval"); 00051 initAddMoreTerminals = true; 00052 00053 globalStatistics = GlobalStatisticsAccess().get(); 00054 00055 // initialize simulation 00056 mobilityTimer = NULL; 00057 mobilityTimer = new cMessage("mobilityTimer"); 00058 scheduleAt(simTime(), mobilityTimer); 00059 00060 if (churnChangeInterval > 0) { 00061 churnTimer = new cMessage("churnTimer"); 00062 scheduleAt(simTime() + churnChangeInterval, churnTimer); 00063 } 00064 }
void RandomChurn::updateDisplayString | ( | ) | [protected, virtual] |
Implements ChurnGenerator.
Definition at line 126 of file RandomChurn.cc.
double RandomChurn::churnChangeInterval [private] |
churn change interval
Definition at line 54 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
bool RandomChurn::churnIntervalChanged [private] |
indicates if targetMean changed.
Definition at line 53 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
cMessage* RandomChurn::churnTimer [private] |
message to change the churn rate
Definition at line 51 of file RandomChurn.h.
Referenced by handleMessage(), initializeChurn(), and ~RandomChurn().
double RandomChurn::creationProbability [private] |
probability of creating a new overlay terminal
Definition at line 44 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
GlobalStatistics* RandomChurn::globalStatistics [private] |
Definition at line 57 of file RandomChurn.h.
Referenced by initializeChurn().
bool RandomChurn::initAddMoreTerminals [private] |
true, if we're still adding more terminals in the init phase
Definition at line 55 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
double RandomChurn::initialDeviation [private] |
deviation of update interval during initalization phase
Definition at line 48 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
double RandomChurn::initialMean [private] |
mean of update interval during initalization phase
Definition at line 47 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
double RandomChurn::migrationProbability [private] |
probability of migrating an overlay terminal
Definition at line 45 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
cMessage* RandomChurn::mobilityTimer [private] |
message to schedule events
Definition at line 52 of file RandomChurn.h.
Referenced by handleMessage(), initializeChurn(), and ~RandomChurn().
double RandomChurn::removalProbability [private] |
probability of removing an overlay terminal
Definition at line 46 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
double RandomChurn::targetMean [private] |
mean of update interval after initalization phase
Definition at line 49 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().
double RandomChurn::targetOverlayTerminalNum [private] |
number of created terminals after init phase
Reimplemented from ChurnGenerator.
Definition at line 50 of file RandomChurn.h.
Referenced by handleMessage(), and initializeChurn().