Simple Module Kademlia

File: Overlay/Kademlia/Kademlia.ned

C++ definition: click here

The main module of the Kademlia implementation

Author: Sebastian Mies

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.

KademliaModules

Implementation of the Kademlia DHT overlay as described in "Kademlia: A peer-to-peer information system based on the XOR metric" by P. Maymounkov and D. Mazieres, published in "In Proceedings of IPTPS02"

Parameters:

Name Type Description
localPort numeric

base overlay parameters

debugOutput bool

enable debug output

keyLength numeric

overlay key length in bits

measureNetwInitPhase bool

gather statistics when bootstrapping

drawOverlayTopology bool

draw arrow to successor node?

hopCountMax numeric

maximum number of overlay hops

joinOnApplicationRequest bool

only join the overlay on application request

useCommonAPIforward bool

enable CommonAPI forward() calls

useNextHopRpc bool

use RPCs for route messages

lookupRedundantNodes numeric

lookup parameters

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

iterativeLookup bool

do iterative instead of recursive lookups

collectPerHopDelay bool

delay statistics for single hops

stabilizeDelay numeric

kademlia parameters

removalDelay numeric

number of timeouts before node removal

k numeric

number of paths (size of k-bucket)

b numeric

network diameter O(log_{2^(b)})

s numeric

number of siblings

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 Kademlia
    parameters:
        // base overlay parameters
        localPort : numeric,             // UDP port for Kademlia messages
        debugOutput : bool,              // enable debug output
        keyLength : numeric,             // overlay key length in bits
        measureNetwInitPhase: bool,      // gather statistics when bootstrapping
        drawOverlayTopology : bool,      // draw arrow to successor node?
        hopCountMax : numeric,           // maximum number of overlay hops
        joinOnApplicationRequest : bool ,// only join the overlay on application
                                         // request
        useCommonAPIforward : bool,      // enable CommonAPI forward() calls
        useNextHopRpc : bool,            // use RPCs for route messages

        // lookup parameters
        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
        iterativeLookup : bool,          // do iterative instead of recursive
                                         // lookups
        collectPerHopDelay : bool,       // delay statistics for single hops

        // kademlia parameters
        stabilizeDelay : numeric,        // stabilization delay 
        removalDelay : numeric,          // number of timeouts before node
                                         // removal
        k : numeric,                     // number of paths (size of k-bucket)
        b : numeric,                     // network diameter O(log_{2^(b)})
        s : numeric;                     // number of siblings

    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