RandomChurn Class Reference

#include <RandomChurn.h>

Inheritance diagram for RandomChurn:

ChurnGenerator

List of all members.


Detailed Description

Random churn generating class.

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
GlobalStatisticsglobalStatistics

Constructor & Destructor Documentation

RandomChurn::~RandomChurn (  ) 

00133                           {
00134     // destroy self timer messages
00135     cancelAndDelete(churnTimer);
00136     cancelAndDelete(mobilityTimer);
00137 }


Member Function Documentation

void RandomChurn::handleMessage ( cMessage *  msg  )  [virtual]

Implements ChurnGenerator.

00067 {
00068     if (!msg->isSelfMessage()) {
00069         delete msg;
00070         return;
00071     }
00072 
00073     if (msg == churnTimer) {
00074         cancelEvent(churnTimer);
00075         scheduleAt(simulation.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(simulation.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(simulation.simTime()
00121                        + truncnormal(targetMean, targetMean / 3), msg);
00122         }
00123     }
00124 }

void RandomChurn::initializeChurn (  )  [virtual]

Implements ChurnGenerator.

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 = (double)(par("churnChangeInterval"));
00051     initAddMoreTerminals = true;
00052 
00053     globalStatistics = GlobalStatisticsAccess().get();
00054 
00055     // initialize simulation
00056     mobilityTimer = NULL;
00057     mobilityTimer = new cMessage("mobilityTimer");
00058     scheduleAt(simulation.simTime(), mobilityTimer);
00059 
00060     if ((double)(par("churnChangeInterval")) > 0) {
00061         churnTimer = new cMessage("churnTimer");
00062         scheduleAt(simulation.simTime() + churnChangeInterval, churnTimer);
00063     }
00064 }

void RandomChurn::updateDisplayString (  )  [protected, virtual]

Implements ChurnGenerator.

00127 {
00128     char buf[80];
00129     sprintf(buf, "random churn");
00130     displayString().setTagArg("t", 0, buf);
00131 }


Member Data Documentation

probability of creating a new overlay terminal

Referenced by handleMessage(), and initializeChurn().

probability of migrating an overlay terminal

Referenced by handleMessage(), and initializeChurn().

probability of removing an overlay terminal

Referenced by handleMessage(), and initializeChurn().

double RandomChurn::initialMean [private]

mean of update interval during initalization phase

Referenced by handleMessage(), and initializeChurn().

deviation of update interval during initalization phase

Referenced by handleMessage(), and initializeChurn().

double RandomChurn::targetMean [private]

mean of update interval after initalization phase

Referenced by handleMessage(), and initializeChurn().

number of created terminals after init phase

Reimplemented from ChurnGenerator.

Referenced by handleMessage(), and initializeChurn().

cMessage* RandomChurn::churnTimer [private]

message to change the churn rate

Referenced by handleMessage(), initializeChurn(), and ~RandomChurn().

cMessage* RandomChurn::mobilityTimer [private]

message to schedule events

Referenced by handleMessage(), initializeChurn(), and ~RandomChurn().

indicates if targetMean changed.

Referenced by handleMessage(), and initializeChurn().

churn change interval

Referenced by handleMessage(), and initializeChurn().

true, if we're still adding more terminals in the init phase

Referenced by handleMessage(), and initializeChurn().

Referenced by initializeChurn().


The documentation for this class was generated from the following files:

Generated on Fri Sep 19 13:05:08 2008 for ITM OverSim by  doxygen 1.5.5