Simple Module Chord

File: Overlay/Chord/Chord.ned

C++ definition: click here

The main module of the Chord implementation

Author: Ingmar Baumgart, Markus Mauch

Usage diagram:

The following diagram shows usage relationships between modules, networks and channels. Unresolved module (and channel) types are missing from the diagram. Click here to see the full picture.

Used in compound modules:

If a module type shows up more than once, that means it has been defined in more than one NED file.

ChordModules

Implementation of the Chord KBR overlay as described in "Chord: A Scalable Peer-to-Peer Lookup Protocol for Internet Applications" by I. Stoica et al. published in Transactions on Networking.

Parameters:

Name Type Description
localPort numeric

UDP port for Chord messages

debugOutput bool

enable debug output

keyLength numeric

overlay key length in bits

useCommonAPIforward bool

enable CommonAPI forward() calls

drawOverlayTopology bool

draw arrow to successor node?

hopCountMax numeric

maximum number of overlay hops

recNumRedundantNodes numeric

numRedundantNodes for recursive routing

joinOnApplicationRequest bool

only join the overlay on application request

collectPerHopDelay bool

delay statistics for single hops

routeMsgAcks bool

use RPCs for route messages

lookupRedundantNodes numeric

number of next hops in each step

lookupParallelPaths numeric

number of parallel paths

lookupParallelRpcs numeric

number of nodes to ask in parallel

lookupSecure bool

true, if all nodes should be identified with a ping

lookupMerge bool

true, if parallel Rpc results should be merged

lookupFailedNodeRpcs bool

communicate failed nodes

lookupStrictParallelRpcs bool

limited the number of concurrent rpcs to parameter parallelRpcs

lookupUseAllParallelResponses bool

merge all parallel responses from earlier steps

lookupNewRpcOnEveryTimeout bool

send a new RPC immediately after an RPC timeouts

lookupNewRpcOnEveryResponse bool

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

lookupFinishOnFirstUnchanged bool

finish lookup, if the last pending RPC returned without progress

routingType string

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

successorListSize numeric

max number of successors in the SuccessorList

joinRetry numeric

after joinRetry unsuccessful join requests, we fetch a need bootstrap node from the BootstrapOracle

stabilizeRetry numeric

retries before a successor is considered failed

joinDelay numeric

delay between join retries (sec)

stabilizeDelay numeric

stabilize interval (sec)

fixfingersDelay numeric

fix_fingers interval (sec)

aggressiveJoinMode bool

use modified (faster) JOIN protocol

extendedFingerTable bool

use the extended finger table?

numFingerCandidates numeric

number of fingers when using extended finger table

proximityRouting bool

use proximity routing

mergeOptimizationL1 bool

enable merge optimization OPL1

mergeOptimizationL2 bool

activate merge optimization OPL2

mergeOptimizationL3 bool

activate merge optimization OPL3

mergeOptimizationL4 bool

activate merge optimization OPL4

Gates:

Name Direction Description
from_udp [ ] input

gate from the UDP layer

to_udp [ ] output

gate to the UDP layer

from_app input

gate from the application

to_app output

gate to the application

direct_in input

gate for sendDirect

Source code:

simple Chord

    parameters:
        localPort : numeric,             // UDP port for Chord messages
        debugOutput : bool,              // enable debug output
        keyLength : numeric,             // overlay key length in bits
        useCommonAPIforward : bool,      // enable CommonAPI forward() calls
        drawOverlayTopology : bool,      // draw arrow to successor node?
        hopCountMax : numeric,           // maximum number of overlay hops
        recNumRedundantNodes : numeric, // numRedundantNodes for recursive routing
        // only join the overlay on application request
        joinOnApplicationRequest : bool,
        collectPerHopDelay : bool,       // delay statistics for single hops
        routeMsgAcks : bool,             // use RPCs for route messages

        lookupRedundantNodes : numeric,  // number of next hops in each step
        lookupParallelPaths : numeric,   // number of parallel paths
        lookupParallelRpcs : numeric,    // number of nodes to ask in parallel
        // true, if all nodes should be identified with a ping
        lookupSecure : bool, 
        // true, if parallel Rpc results should be merged
        lookupMerge : bool,
        lookupFailedNodeRpcs : bool,     // communicate failed nodes
        lookupStrictParallelRpcs: bool,  // limited the number of concurrent rpcs to parameter parallelRpcs
        lookupUseAllParallelResponses: bool, // merge all parallel responses from earlier steps
        lookupNewRpcOnEveryTimeout: bool, // send a new RPC immediately after an RPC timeouts
        lookupNewRpcOnEveryResponse: bool,  // send a new RPC after every response, even if there was no progress
        lookupFinishOnFirstUnchanged: bool, // finish lookup, if the last pending RPC returned without progress    
        routingType : string, // default routing mode (iterative, semi-recursive,...)         

        // max number of successors in the SuccessorList
        successorListSize : numeric,

        // after joinRetry unsuccessful join requests, we fetch
        // a need bootstrap node from the BootstrapOracle
        joinRetry : numeric,

        // retries before a successor is considered failed
        stabilizeRetry : numeric,

        joinDelay : numeric,           // delay between join retries (sec)
        stabilizeDelay : numeric,      // stabilize interval (sec)
        fixfingersDelay : numeric,     // fix_fingers interval (sec)
        aggressiveJoinMode : bool,     // use modified (faster) JOIN protocol
        extendedFingerTable : bool,    // use the extended finger table?
        // number of fingers when using extended finger table
        numFingerCandidates : numeric,
        proximityRouting : bool,    // use proximity routing

        mergeOptimizationL1 : bool, // enable merge optimization OPL1
        mergeOptimizationL2 : bool, // activate merge optimization OPL2
        mergeOptimizationL3 : bool, // activate merge optimization OPL3
        mergeOptimizationL4 : bool; // activate merge optimization OPL4
        
    gates:
        in: from_udp[]; // gate from the UDP layer
        out: to_udp[];  // gate to the UDP layer
        in: from_app;   // gate from the application
        out: to_app;    // gate to the application
        in: direct_in;  // gate for sendDirect
endsimple