OverSim
|
The BootstrapList module maintains a list of bootstrap node candidates. More...
#include <BootstrapList.h>
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 NodeHandle & | getThisNode () |
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. | |
NodeVector * | callLocalLookup (const OverlayKey &key, int num, bool safe) |
Common API function: produces a list of nodes that can be used as next hops towards key. | |
NodeVector * | callNeighborSet (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 | |
ZeroconfConnector * | zeroconfConnector |
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 | |
UnderlayConfigurator * | underlayConfigurator |
pointer to UnderlayConfigurator in this node | |
GlobalNodeList * | globalNodeList |
pointer to GlobalNodeList in this node | |
GlobalStatistics * | globalStatistics |
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 |
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.
Definition at line 53 of file BootstrapList.h.
BootstrapList::BootstrapList | ( | ) |
Definition at line 60 of file BootstrapList.cc.
BootstrapList::~BootstrapList | ( | ) |
Definition at line 67 of file BootstrapList.cc.
|
privatevirtual |
Definition at line 386 of file BootstrapList.cc.
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.
overlayId | id 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().
|
inlineprotectedvirtual |
Return the component type of this module.
This method is overloaded by BaseOverlay/BaseApp and returns the appropriate component type of this module.
Reimplemented from BaseApp.
Definition at line 113 of file BootstrapList.h.
|
private |
Periodic maintenance method for the bootstrap list.
Definition at line 140 of file BootstrapList.cc.
|
private |
Handle the response for a lookup rpc.
This is used to detected foreign overlay partitions
msg | The lookup response message |
Definition at line 172 of file BootstrapList.cc.
|
private |
Definition at line 155 of file BootstrapList.cc.
|
private |
Definition at line 129 of file BootstrapList.cc.
|
privatevirtual |
Definition at line 73 of file BootstrapList.cc.
bool BootstrapList::insertBootstrapCandidate | ( | const NodeHandle & | node, |
BootstrapNodePrioType | prio = DNSSD |
||
) |
Inserts a new bootstrap candidate into the bootstrap list.
node | the bootstrap candidate |
prio | priority of the bootstrap node |
Definition at line 293 of file BootstrapList.cc.
Referenced by GlobalNodeList::mergeBootstrapNodes().
bool BootstrapList::insertBootstrapCandidate | ( | BootstrapNodeHandle & | node | ) |
Definition at line 320 of file BootstrapList.cc.
void BootstrapList::locateBootstrapNode | ( | const NodeHandle & | node | ) |
Determine locality of a bootstrap node.
node | the newly discovered bootstrap node |
Definition at line 276 of file BootstrapList.cc.
|
protectedvirtual |
Reimplemented from BaseRpc.
Definition at line 203 of file BootstrapList.cc.
|
protectedvirtual |
Reimplemented from BaseRpc.
Definition at line 224 of file BootstrapList.cc.
void BootstrapList::registerBootstrapNode | ( | const NodeHandle & | node, |
int32_t | overlayId = 0 |
||
) |
Definition at line 373 of file BootstrapList.cc.
Referenced by TCPExampleApp::initializeApp().
void BootstrapList::removeBootstrapCandidate | ( | const TransportAddress & | addr | ) |
Remove an unavailable bootstrap candidate from the bootstraplist.
addr | the address of the bootstrap candidate |
Definition at line 343 of file BootstrapList.cc.
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().
|
private |
Definition at line 113 of file BootstrapList.h.
|
private |
maintain a list of bootstrap candidates and check them periodically
Definition at line 150 of file BootstrapList.h.
|
private |
if true, detect and merge overlay partitions
Definition at line 149 of file BootstrapList.h.
|
staticprivate |
the interval of the maintenance timer in seconds
Definition at line 145 of file BootstrapList.h.
|
private |
self-message for periodic maintenance
Definition at line 147 of file BootstrapList.h.
|
private |
pointer to the ZeroconfConnector module
Definition at line 148 of file BootstrapList.h.