OverSim
BootstrapList Class Reference

The BootstrapList module maintains a list of bootstrap node candidates. More...

#include <BootstrapList.h>

Inheritance diagram for BootstrapList:
BaseApp BaseRpc BaseTcpSupport RpcListener

Public Member Functions

 BootstrapList ()
 ~BootstrapList ()
const TransportAddress getBootstrapNode (int32_t overlayId=0)
 Get a bootstrap node from the bootstrap list.
void locateBootstrapNode (const NodeHandle &node)
 Determine locality of a bootstrap node.
bool insertBootstrapCandidate (const NodeHandle &node, BootstrapNodePrioType prio=DNSSD)
 Inserts a new bootstrap candidate into the bootstrap list.
bool insertBootstrapCandidate (BootstrapNodeHandle &node)
void removeBootstrapCandidate (const TransportAddress &addr)
 Remove an unavailable bootstrap candidate from the bootstraplist.
void removeBootstrapNode (const NodeHandle &node, int32_t overlayId=0)
void registerBootstrapNode (const NodeHandle &node, int32_t overlayId=0)
- Public Member Functions inherited from BaseApp
 BaseApp ()
virtual ~BaseApp ()
 virtual destructor
- Public Member Functions inherited from BaseRpc
 BaseRpc ()
const NodeHandlegetThisNode ()
 Returns the NodeHandle of this node.
simtime_t getUdpTimeout ()
- Public Member Functions inherited from RpcListener
virtual ~RpcListener ()
 destructor
- Public Member Functions inherited from BaseTcpSupport
virtual void socketDataArrived (int connId, void *yourPtr, cPacket *msg, bool urgent)
virtual void socketEstablished (int connId, void *yourPtr)
virtual void socketPeerClosed (int connId, void *yourPtr)
virtual void socketFailure (int connId, void *yourPtr, int code)
virtual void socketStatusArrived (int connId, void *yourPtr, TCPStatusInfo *status)

Protected Member Functions

virtual void pingResponse (PingResponse *pingResponse, cPolymorphic *context, int rpcId, simtime_t rtt)
virtual void pingTimeout (PingCall *pingCall, const TransportAddress &dest, cPolymorphic *context, int rpcId)
virtual CompType getThisCompType ()
 Return the component type of this module.
- Protected Member Functions inherited from BaseApp
int numInitStages () const
 method to set InitStage
void initialize (int stage)
 initializes base class-attributes
virtual void initializeApp (int stage)
 initializes derived class-attributes
void handleMessage (cMessage *msg)
 checks for message type and calls corresponding method
virtual void receiveChangeNotification (int category, const cPolymorphic *details)
 callback-method for events at the NotificationBoard
virtual void handleTransportAddressChangedNotification ()
 This method gets call if the node has a new TransportAddress (IP address) because he changed his access network.
virtual void handleNodeLeaveNotification ()
 This method gets call **.gracefulLeaveDelay seconds before it is killed.
virtual void handleNodeGracefulLeaveNotification ()
 This method gets call **.gracefulLeaveDelay seconds before it is killed if this node is among the gracefulLeaveProbability nodes.
void finish ()
 collects statistical data
virtual void finishApp ()
 collects statistical data of derived app
void callRoute (const OverlayKey &key, cPacket *msg, const TransportAddress &hint=TransportAddress::UNSPECIFIED_NODE, RoutingType routingType=DEFAULT_ROUTING)
 Common API function: calls route-method in overlay.
void callRoute (const OverlayKey &key, cPacket *msg, const std::vector< TransportAddress > &sourceRoute, RoutingType routingType=DEFAULT_ROUTING)
virtual void deliver (OverlayKey &key, cMessage *msg)
 Common API function: handles delivered messages from overlay.
virtual void forward (OverlayKey *key, cPacket **msg, NodeHandle *nextHopNode)
 Common API function: handles messages from overlay to be forwarded.
virtual void update (const NodeHandle &node, bool joined)
 Common API function: informs application about neighbors and own nodeID.
NodeVectorcallLocalLookup (const OverlayKey &key, int num, bool safe)
 Common API function: produces a list of nodes that can be used as next hops towards key.
NodeVectorcallNeighborSet (int num)
 Common API function: produces a list of neighbor nodes.
bool isSiblingFor (const NodeHandle &node, const OverlayKey &key, int numSiblings, bool *err)
 Query if a node is among the siblings for a given key.
virtual void handleLowerMessage (cMessage *msg)
 processes self-messages
virtual void handleUpperMessage (cMessage *msg)
 handleUpperMessage gets called of handleMessage(cMessage* msg) if msg arrivedOn from_upperTier (currently msg gets deleted in this function)
virtual void handleUDPMessage (cMessage *msg)
 method to handle messages that come directly from the UDP gate
virtual void handleReadyMessage (CompReadyMessage *msg)
 method to handle ready messages from the overlay
virtual void bindToPort (int port)
 Tells UDP we want to get all packets arriving on the given port.
virtual void sendMessageToUDP (const TransportAddress &destAddr, cPacket *msg, simtime_t delay=SIMTIME_ZERO)
 Sends a packet over UDP.
virtual void handleTraceMessage (cMessage *msg)
 handleTraceMessage gets called of handleMessage(cMessage* msg) if a message arrives at trace_in.
void sendMessageToLowerTier (cPacket *msg)
 sends non-commonAPI message to the lower tier
bool internalHandleRpcCall (BaseCallMessage *msg)
 Handles internal rpc requests.
void internalHandleRpcResponse (BaseResponseMessage *msg, cPolymorphic *context, int rpcId, simtime_t rtt)
 Handles rpc responses internal in base classes

void internalSendRouteRpc (BaseRpcMessage *message, const OverlayKey &destKey, const std::vector< TransportAddress > &sourceRoute, RoutingType routingType)
void sendReadyMessage (bool ready=true, const OverlayKey &nodeId=OverlayKey::UNSPECIFIED_KEY)
- Protected Member Functions inherited from BaseRpc
virtual void internalHandleRpcTimeout (BaseCallMessage *msg, const TransportAddress &dest, cPolymorphic *context, int rpcId, const OverlayKey &destKey)
 Handles rpc timeouts internal in base classes

void initRpcs ()
 Initializes Remote-Procedure state.
void finishRpcs ()
 Deinitializes Remote-Procedure state.
virtual void internalHandleRpcMessage (BaseRpcMessage *msg)
 Handles incoming rpc messages and delegates them to the corresponding listeners or handlers.
uint32_t sendRouteRpcCall (CompType destComp, const TransportAddress &dest, const OverlayKey &destKey, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Routes a Remote-Procedure-Call message to an OverlayKey.
uint32_t sendRouteRpcCall (CompType destComp, const OverlayKey &destKey, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Routes a Remote-Procedure-Call message to an OverlayKey.
uint32_t sendRouteRpcCall (CompType destComp, const TransportAddress &dest, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Sends a Remote-Procedure-Call message using the overlay's UDP port
This replaces ROUTE_DIRECT calls!
uint32_t sendUdpRpcCall (const TransportAddress &dest, BaseCallMessage *msg, cPolymorphic *context=NULL, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Sends a Remote-Procedure-Call message to the underlay

uint32_t sendInternalRpcCall (CompType destComp, BaseCallMessage *msg, cPolymorphic *context=NULL, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Sends an internal Remote-Procedure-Call between two tiers

void cancelRpcMessage (uint32_t nonce)
 Cancels a Remote-Procedure-Call.
void cancelAllRpcs ()
 Cancels all RPCs.
void sendRpcResponse (TransportType transportType, CompType destComp, const TransportAddress &dest, const OverlayKey &destKey, BaseCallMessage *call, BaseResponseMessage *response)
 Send Remote-Procedure response message and deletes call message.
void sendRpcResponse (BaseCallMessage *call, BaseResponseMessage *response)
 Send Remote-Procedure response message to UDP and deletes call message.
int pingNode (const TransportAddress &dest, simtime_t timeout=-1, int retries=0, cPolymorphic *context=NULL, const char *caption="PING", RpcListener *rpcListener=NULL, int rpcId=-1, TransportType transportType=INVALID_TRANSPORT)
 ping a node by its TransportAddress
virtual bool handleRpcCall (BaseCallMessage *msg)
 Processes Remote-Procedure-Call invocation messages.
bool internalHandleMessage (cMessage *msg)
- Protected Member Functions inherited from RpcListener
virtual void handleRpcResponse (BaseResponseMessage *msg, cPolymorphic *context, int rpcId, simtime_t rtt)
 This method is called if an RPC response has been received.
virtual void handleRpcResponse (BaseResponseMessage *msg, const RpcState &rpcState, simtime_t rtt)
 This method is called if an RPC response has been received.
virtual void handleRpcTimeout (BaseCallMessage *msg, const TransportAddress &dest, cPolymorphic *context, int rpcId, const OverlayKey &destKey)
 This method is called if an RPC timeout has been reached.
virtual void handleRpcTimeout (const RpcState &rpcState)
 This method is called if an RPC timeout has been reached.
- Protected Member Functions inherited from BaseTcpSupport
void handleTCPMessage (cMessage *msg)
 Member function to handle incoming TCP messages.
void bindAndListenTcp (int port)
 Member function to bind service to the specified port and listen afterwards.
bool isAlreadyConnected (TransportAddress address)
 Member function to check if the service is already connected.
void establishTcpConnection (TransportAddress address)
 Member function to establish a connection to the specified node.
void sendTcpData (cPacket *msg, TransportAddress address)
 Member function to send TCP data to the specified node.
virtual void handleConnectionEvent (EvCode code, TransportAddress address)
 Member function to handle passive connection events.
virtual void handleDataReceived (TransportAddress address, cPacket *msg, bool urgent)
 Member function to handle incoming data.
virtual void handleIncomingConnection (TransportAddress address)
 Member function to handle newly opened connections.
void closeTcpConnection (TransportAddress address)
 Member function to close an established connection.
void setTcpOut (cGate *gate)
 Member function to set local gate towards the TCP module during init phase.
cGate * getTcpOut ()
 Member function to get local gate towards the TCP module.

Private Member Functions

virtual void initializeApp (int stage)
virtual void finishApp ()
void handleTimerEvent (cMessage *msg)
void handleBootstrapListTimerExpired ()
 Periodic maintenance method for the bootstrap list.
void handleRpcResponse (BaseResponseMessage *msg, cPolymorphic *context, int rpcId, simtime_t rtt)
void handleLookupResponse (LookupResponse *msg)
 Handle the response for a lookup rpc.

Private Attributes

BootstrapNodeSet bootstrapList
cMessage * timerMsg
 self-message for periodic maintenance
ZeroconfConnectorzeroconfConnector
 pointer to the ZeroconfConnector module
bool mergeOverlayPartitions
 if true, detect and merge overlay partitions
bool maintainList
 maintain a list of bootstrap candidates and check them periodically

Static Private Attributes

static const int timerInterval = 10
 the interval of the maintenance timer in seconds

Additional Inherited Members

- Public Types inherited from BaseTcpSupport
enum  EvCode {
  NO_EST_CONNECTION, PEER_CLOSED, PEER_TIMEDOUT, PEER_REFUSED,
  CONNECTION_RESET, CONNECTION_SUCC_ClOSED
}
- Protected Attributes inherited from BaseApp
UnderlayConfiguratorunderlayConfigurator
 pointer to UnderlayConfigurator in this node
GlobalNodeListglobalNodeList
 pointer to GlobalNodeList in this node
GlobalStatisticsglobalStatistics
 pointer to GlobalStatistics module in this node
NotificationBoard * notificationBoard
 pointer to NotificationBoard in this node
bool debugOutput
 debug output yes/no?
int numOverlaySent
 number of sent packets to overlay
int bytesOverlaySent
 number of sent bytes to overlay
int numOverlayReceived
 number of received packets from overlay
int bytesOverlayReceived
 number of received bytes from overlay
int numUdpSent
 number of sent packets to UDP
int bytesUdpSent
 number of sent bytes to UDP
int numUdpReceived
 number of received packets from UDP
int bytesUdpReceived
 number of received bytes from UDP
simtime_t creationTime
 simTime when the App has been created

Detailed Description

The BootstrapList module maintains a list of bootstrap node candidates.

The BootstrapList module maintains a list of bootstrap node candidates received from various sources (GlobalNodeList for simulations and ZeroconfConnector for SingleHostUnderlay). This list is also used to detect overlay partitions and triggers the merging process.

Author
Bin Zheng, Ingmar Baumgart
See Also
BootstrapList

Definition at line 53 of file BootstrapList.h.

Constructor & Destructor Documentation

BootstrapList::BootstrapList ( )

Definition at line 60 of file BootstrapList.cc.

{
timerMsg = NULL;
}
BootstrapList::~BootstrapList ( )

Definition at line 67 of file BootstrapList.cc.

{
cancelAndDelete(timerMsg);
}

Member Function Documentation

void BootstrapList::finishApp ( )
privatevirtual

Definition at line 386 of file BootstrapList.cc.

{
// dump the list of bootstrap nodes into the local cache only when
// using SingleHostUnderlayConfigurator
ofstream nodeListFile("nodelist.dat", ios::out|ios::trunc);
if (!nodeListFile) {
std::cerr << "nodelist.dat could not be opened" << endl;
} else {
for (BootstrapNodeSet::iterator iter = bootstrapList.begin();
iter != bootstrapList.end(); iter++) {
nodeListFile << iter->second->getIp().str() << ' '
<< iter->second->getPort() << ' '
<< iter->second->getKey().toString(16) << '\n';
}
nodeListFile.close();
}
}
// delete all bootstrap nodes and clear the list
for (BootstrapNodeSet::iterator iter = bootstrapList.begin();
iter != bootstrapList.end(); iter++) {
delete iter->second;
}
bootstrapList.clear();
}
const TransportAddress BootstrapList::getBootstrapNode ( int32_t  overlayId = 0)

Get a bootstrap node from the bootstrap list.

If not using SingleHostUnderlayConfigurator and the list is empty, return a node by asking the GlobalNodeList.

Parameters
overlayIdid of the overlay. Is used to support multiple disjoint overlays. Default is 0.

Definition at line 237 of file BootstrapList.cc.

Referenced by BasePastry::baseChangeState(), Gia::changeState(), oversim::Nice::changeState(), Quon::handleJoin(), Vast::handleJoin(), NeighborCache::handleReadyMessage(), Kademlia::joinOverlay(), and NeighborCache::prepareOverlay().

{
// ask neighborCache (discovery or re-join)
if (!temp.isUnspecified()) {
return temp;
}
if (!maintainList) {
// TODO: add a parameter to return malicious bootstrap nodes also
return overlay->globalNodeList->getRandomNode(overlayId, -1, true,
true);
// return overlay->globalNodeList->getBootstrapNode();
} else {
const NodeHandle *bootstrapNode = &NodeHandle::UNSPECIFIED_NODE;
int i, j = 0;
// pick a random node from the list
if (!bootstrapList.empty()) {
i = intrand(bootstrapList.size());
BootstrapNodeSet::iterator iter = bootstrapList.begin();
while (j < i) {
iter++;
j++;
}
bootstrapNode = (NodeHandle *)iter->second;
} else {
// if the list empty, get a bootstrap node from GlobalNodeList
bootstrapNode = &overlay->globalNodeList->
}
return *bootstrapNode;
}
}
virtual CompType BootstrapList::getThisCompType ( )
inlineprotectedvirtual

Return the component type of this module.

This method is overloaded by BaseOverlay/BaseApp and returns the appropriate component type of this module.

Returns
the component type of this module

Reimplemented from BaseApp.

Definition at line 113 of file BootstrapList.h.

{ return BOOTSTRAPLIST_COMP; };
void BootstrapList::handleBootstrapListTimerExpired ( )
private

Periodic maintenance method for the bootstrap list.

Definition at line 140 of file BootstrapList.cc.

{
simtime_t current = simTime();
BootstrapNodeSet::iterator iter;
for (iter = bootstrapList.begin(); iter != bootstrapList.end(); iter++) {
node = iter->second;
if (timerInterval <= SIMTIME_DBL(current - node->getLastPing())) {
pingNode(*node);
}
}
}
void BootstrapList::handleLookupResponse ( LookupResponse msg)
private

Handle the response for a lookup rpc.

This is used to detected foreign overlay partitions

Parameters
msgThe lookup response message

Definition at line 172 of file BootstrapList.cc.

{
EV << "[BootstrapList::handleLookupResponse() @ "
<< " (" << overlay->getThisNode().getKey().toString(16) << ")]\n"
<< " Lookup response for key " << msg->getKey()<< " : ";
if (msg->getIsValid()) {
for (uint32_t i=0; i<msg->getSiblingsArraySize(); i++) {
if (msg->getSiblings(i).getKey() == msg->getKey()) {
EV << "Key " << msg->getSiblings(i)
<< "belongs to a local node." << endl;
return;
}
}
EV << "New partition discovered, going to join." << endl;
BootstrapNodeSet::iterator iter;
for (iter = bootstrapList.begin(); iter != bootstrapList.end(); iter++) {
if (iter->second->getKey() == msg->getKey())
overlay->joinForeignPartition(*iter->second);
}
} else {
EV << "failed" << endl;
}
return;
}
void BootstrapList::handleRpcResponse ( BaseResponseMessage msg,
cPolymorphic *  context,
int  rpcId,
simtime_t  rtt 
)
private

Definition at line 155 of file BootstrapList.cc.

{
handleLookupResponse(_LookupResponse);
EV << "[BootstrapList::handleRpcResponse() @ "
<< " (" << overlay->getThisNode().getKey().toString(16) << ")]\n"
<< " Lookup RPC Response received: id=" << rpcId << "\n"
<< " msg=" << *_LookupResponse << " rtt=" << rtt
<< endl;
}
}
void BootstrapList::handleTimerEvent ( cMessage *  msg)
private

Definition at line 129 of file BootstrapList.cc.

{
if (msg == timerMsg) {
scheduleAt(simTime() + timerInterval, msg);
} else {
throw cRuntimeError("BootstrapList::handleTimerEvent(): "
"Received unknown self-message!");
}
}
void BootstrapList::initializeApp ( int  stage)
privatevirtual

Definition at line 73 of file BootstrapList.cc.

{
if (stage != MIN_STAGE_COMPONENTS) {
return;
}
mergeOverlayPartitions = par("mergeOverlayPartitions");
maintainList = par("maintainList");
if (getParentModule()->getParentModule()->getSubmodule("zeroconfConnector", 0)) {
zeroconfConnector = check_and_cast<ZeroconfConnector *>(getParentModule()->
getParentModule()->getSubmodule("zeroconfConnector", 0));
}
}
// load local cache list only when using SingleHostUnderlayConfigurator
ifstream nodeListFile("nodelist.dat", ios::in);
if (!nodeListFile) {
EV << "[BootstrapList::initializeApp() @ " << overlay->getThisNode().getIp()
<< " (" << overlay->getThisNode().getKey() << ")]\n"
<< " nodelist.dat not found"
<< endl;
} else {
char address[16];
int port;
string key;
while (nodeListFile >> address >> port >> key) {
node = new BootstrapNodeHandle(OverlayKey(key, 16),
IPvXAddress(address), port,
if (node)
}
nodeListFile.close();
//TODO
}
} else {
}
if (maintainList) {
timerMsg = new cMessage("BootstrapListTimer");
scheduleAt(simTime() + timerInterval, timerMsg);
}
}
bool BootstrapList::insertBootstrapCandidate ( const NodeHandle node,
BootstrapNodePrioType  prio = DNSSD 
)

Inserts a new bootstrap candidate into the bootstrap list.

Parameters
nodethe bootstrap candidate
priopriority of the bootstrap node
Returns
true, if bootstrap node is already in the list

Definition at line 293 of file BootstrapList.cc.

Referenced by GlobalNodeList::mergeBootstrapNodes().

{
Enter_Method_Silent();
BootstrapNodeSet::iterator iter;
BootstrapNodeHandle *bootstrapNode;
// if node already in the list, update its lastPing and nodePrio fields
if ((iter = bootstrapList.find(node)) != bootstrapList.end()) {
iter->second->setLastPing(simTime());
iter->second->setNodePrio(prio);
return true;
}
if ((bootstrapNode = new BootstrapNodeHandle(node, prio))) {
bootstrapNode->setLastPing(simTime());
bootstrapList.insert(NodePair(*bootstrapNode, bootstrapNode));
}
return false;
}
bool BootstrapList::insertBootstrapCandidate ( BootstrapNodeHandle node)

Definition at line 320 of file BootstrapList.cc.

{
Enter_Method_Silent();
BootstrapNodeSet::iterator iter;
node.setLastPing(simTime());
// if node already in the list, update its lastPing and nodePrio fields
if ((iter = bootstrapList.find(node)) != bootstrapList.end()) {
iter->second->setLastPing(node.getLastPing());
iter->second->setNodePrio(node.getNodePrio());
return true;
}
bootstrapList.insert(NodePair(node, &node));
return false;
}
void BootstrapList::locateBootstrapNode ( const NodeHandle node)

Determine locality of a bootstrap node.

Parameters
nodethe newly discovered bootstrap node

Definition at line 276 of file BootstrapList.cc.

{
Enter_Method_Silent();
LookupCall* call = new LookupCall();
call->setBitLength(0);
call->setKey(node.getKey());
}
return;
}
void BootstrapList::pingResponse ( PingResponse pingResponse,
cPolymorphic *  context,
int  rpcId,
simtime_t  rtt 
)
protectedvirtual

Reimplemented from BaseRpc.

Definition at line 203 of file BootstrapList.cc.

{
NodeHandle &srcNode = pingResponse->getSrcNode();
BootstrapNodeSet::iterator iter;
EV << "[BootstrapList::pingResponse() @ " << overlay->getThisNode().getIp()
<< " (" << overlay->getThisNode().getKey() << ")]\n"
<< " Ping response from node " << srcNode
<< " with rtt " << rtt << endl;
// update the lastPing field of the source node
if (!srcNode.isUnspecified())
if ((iter = bootstrapList.find(srcNode)) != bootstrapList.end())
iter->second->setLastPing(simTime());
return;
}
void BootstrapList::pingTimeout ( PingCall pingCall,
const TransportAddress dest,
cPolymorphic *  context,
int  rpcId 
)
protectedvirtual

Reimplemented from BaseRpc.

Definition at line 224 of file BootstrapList.cc.

{
EV << "[BootstrapList::pingTimeout() @ " << overlay->getThisNode().getIp()
<< " (" << overlay->getThisNode().getKey() << ")]\n"
<< " Ping timeout for node " << dest << endl;
// destination does not answer, remove it from the list
}
void BootstrapList::registerBootstrapNode ( const NodeHandle node,
int32_t  overlayId = 0 
)

Definition at line 373 of file BootstrapList.cc.

Referenced by TCPExampleApp::initializeApp().

{
globalNodeList->registerPeer(node, overlayId);
// at this point, we consider this node as booted and therefore have to
// announce the boot service for it via zeroconfConnector
}
}
void BootstrapList::removeBootstrapCandidate ( const TransportAddress addr)

Remove an unavailable bootstrap candidate from the bootstraplist.

Parameters
addrthe address of the bootstrap candidate

Definition at line 343 of file BootstrapList.cc.

{
BootstrapNodeSet::iterator iter;
BootstrapNodeHandle* bootstrapNode;
if (!addr.isUnspecified()) {
if ((iter = bootstrapList.find(addr)) != bootstrapList.end()) {
bootstrapNode = iter->second;
bootstrapList.erase(iter);
delete bootstrapNode;
}
}
return;
}
void BootstrapList::removeBootstrapNode ( const NodeHandle node,
int32_t  overlayId = 0 
)

Definition at line 360 of file BootstrapList.cc.

Referenced by BasePastry::baseChangeState(), oversim::Nice::changeState(), Gia::finishOverlay(), BasePastry::finishOverlay(), and Kademlia::joinOverlay().

{
overlay->globalNodeList->removePeer(node, overlayId);
// at this point, we consider this node not being able to provide the
// boot service anymore, therefore we have to revoke
// the service via zeroconfConnector
}
}

Member Data Documentation

BootstrapNodeSet BootstrapList::bootstrapList
private

Definition at line 113 of file BootstrapList.h.

bool BootstrapList::maintainList
private

maintain a list of bootstrap candidates and check them periodically

Definition at line 150 of file BootstrapList.h.

bool BootstrapList::mergeOverlayPartitions
private

if true, detect and merge overlay partitions

Definition at line 149 of file BootstrapList.h.

const int BootstrapList::timerInterval = 10
staticprivate

the interval of the maintenance timer in seconds

Definition at line 145 of file BootstrapList.h.

cMessage* BootstrapList::timerMsg
private

self-message for periodic maintenance

Definition at line 147 of file BootstrapList.h.

ZeroconfConnector* BootstrapList::zeroconfConnector
private

pointer to the ZeroconfConnector module

Definition at line 148 of file BootstrapList.h.


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