Compound Module KoordeModules

Package: oversim.overlay.koorde
File: src/overlay/koorde/Koorde.ned

Implementation of the Koorde DHT overlay as described in "Koorde: A simple degree-optimal distributed hash table" by M. Frans Kaashoek and David R. Karger,. published in Proceedings of the 2nd International Workshop on Peer-to-Peer Systems (IPTPS '03).

Author: Jochen Schenk, Ingmar Baumgart

Koorde ChordSuccessorList

Usage diagram:

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram. Click here to see the full picture.

Inheritance diagram:

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram. Click here to see the full picture.

Gates:

Name Direction Size Description
udpIn input

gate from the UDP layer

udpOut output

gate to the UDP layer

tcpIn input

gate from the TCP layer

tcpOut output

gate to the TCP layer

appIn input

gate from the application

appOut output

gate to the application

Unassigned submodule parameters:

Name Type Default value Description
koorde.rpcUdpTimeout double

default timeout value for direct RPCs

koorde.rpcKeyTimeout double

default timeout value for routed RPCs

koorde.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

koorde.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

koorde.localPort int

UDP port for overlay messages

koorde.overlayId int

identifies the overlay this node belongs to (used for multiple overlays)

koorde.debugOutput bool

enable debug output

koorde.keyLength int

overlay key length in bits

koorde.nodeId string

optional nodeId as string in hexadecimal notation

koorde.useCommonAPIforward bool

enable CommonAPI forward() calls

koorde.drawOverlayTopology bool

draw arrow to successor node?

koorde.hopCountMax int

maximum number of overlay hops

koorde.recNumRedundantNodes int

numRedundantNodes for recursive routing

koorde.joinOnApplicationRequest bool

only join the overlay on application request

koorde.collectPerHopDelay bool

delay statistics for single hops

koorde.routeMsgAcks bool

use RPCs for route messages

koorde.lookupRedundantNodes int

number of next hops in each step

koorde.lookupParallelPaths int

number of parallel paths

koorde.lookupParallelRpcs int

number of nodes to ask in parallel

koorde.lookupVerifySiblings bool

true, if siblings need to be authenticated with a ping

koorde.lookupMajoritySiblings bool

true, if sibling candidates are selected by a majority decision if using parallel paths

koorde.lookupMerge bool

true, if parallel Rpc results should be merged

koorde.lookupFailedNodeRpcs bool

communicate failed nodes

koorde.lookupStrictParallelRpcs bool

limited the number of concurrent rpcs to parameter parallelRpcs

koorde.lookupUseAllParallelResponses bool

merge all parallel responses from earlier steps

koorde.lookupNewRpcOnEveryTimeout bool

send a new RPC immediately after an RPC timeouts

koorde.lookupNewRpcOnEveryResponse bool

send a new RPC after every response, even if there was no progress

koorde.lookupFinishOnFirstUnchanged bool

finish lookup, if the last pending RPC returned without progress

koorde.lookupVisitOnlyOnce bool

if true, the same node is never asked twice during a single lookup

koorde.lookupAcceptLateSiblings bool

if true, a FindNodeResponse with sibling flag set is always accepted, even if it is from a previous lookup step

koorde.routingType string

default routing mode (iterative, semi-recursive,...)

koorde.rejoinOnFailure bool

rejoin after loosing connection to the overlay?

koorde.sendRpcResponseToLastHop bool

needed by KBR protocols for NAT support

koorde.recordRoute bool

record visited hops on route

koorde.dropFindNodeAttack bool

if node is malicious, it tries a findNode attack

koorde.isSiblingAttack bool

if node is malicious, it tries a isSibling attack

koorde.invalidNodesAttack bool

if node is malicious, it tries a invalidNode attack

koorde.dropRouteMessageAttack bool

if node is malicious, it drops all received BaseRouteMessages

koorde.measureAuthBlock bool

if true, measure the overhead of signatures in rpc messages

koorde.restoreContext bool

if true, a node rejoins with its old nodeId and malicious state

koorde.stabilizeDelay double

number of seconds between two stabilize algo calls

koorde.stabilizeRetry int

retries before neighbor considered failed

koorde.joinRetry int

number of join retries

koorde.joinDelay double

time interval between two join tries

koorde.successorListSize int

maximal number of nodes in successor list

koorde.deBruijnListSize int

maximal number of nodes in de Bruijn list

koorde.shiftingBits int

number of bits concurrently shifted

koorde.deBruijnDelay double

number of seconds between two de Bruijn algo calls

koorde.fixfingersDelay double

relic from Chord

koorde.checkPredecessorDelay double

checkPredecessor interval (sec)

koorde.aggressiveJoinMode bool

use modified (faster) JOIN protocol

koorde.extendedFingerTable bool

use the extended finger table?

koorde.numFingerCandidates int

relic from Chord

koorde.proximityRouting bool

use proximity routing

koorde.useOtherLookup bool

flag which is indicating that the optimization other lookup is enabled

koorde.useSucList bool

flag which is indicating that the optimization using the successorlist is enabled

koorde.setupDeBruijnBeforeJoin bool

if true, first setup the de bruijn node using the bootstrap node and than join the ring

koorde.setupDeBruijnAtJoin bool

if true, join the ring and setup the de bruijn node using the bootstrap node in parallel

koorde.mergeOptimizationL1 bool

enable merge optimization OPL1

koorde.mergeOptimizationL2 bool

activate merge optimization OPL2

koorde.mergeOptimizationL3 bool

activate merge optimization OPL3

koorde.mergeOptimizationL4 bool

activate merge optimization OPL4

koorde.memorizeFailedSuccessor bool

Source code:

//
// Implementation of the Koorde DHT overlay as described in
// "Koorde: A simple degree-optimal distributed hash table"
// by M. Frans Kaashoek and David R. Karger,. published in
// Proceedings of the 2nd International Workshop on
// Peer-to-Peer Systems (IPTPS '03).
//
// @author Jochen Schenk, Ingmar Baumgart
//
module KoordeModules like IOverlay
{
    gates:
        input udpIn; // gate from the UDP layer
        output udpOut; // gate to the UDP layer
        input tcpIn;    // gate from the TCP layer
        output tcpOut;    // gate to the TCP layer
        input appIn; // gate from the application
        output appOut; // gate to the application

    submodules:
        koorde: Koorde {
            parameters:
                @display("p=60,60;i=block/circle");
        }
        successorList: ChordSuccessorList {
            parameters:
                @display("p=136,60;i=block/table");
        }
    connections allowunconnected:
        udpIn --> koorde.udpIn;
        udpOut <-- koorde.udpOut;
        appIn --> koorde.appIn;
        appOut <-- koorde.appOut;

}