File: Overlay/Kademlia/Kademlia.ned
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"
Author: Sebastian Mies
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.
If a module type shows up more than once, that means it has been defined in more than one NED file.
Kademlia | The main module of the Kademlia implementation |
Name | Type | Description |
---|---|---|
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 |
collectPerHopDelay | bool | delay statistics for single hops |
drawOverlayTopology | bool | draw arrow to successor node? |
hopCountMax | numeric | maximum number of overlay hops |
joinOnApplicationRequest | bool | only join the overlay on application request |
useNextHopRpc | bool | use RPCs for route messages |
useCommonAPIforward | bool | enable CommonAPI forward() calls |
iterativeLookup | bool | do iterative instead of recursive |
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 |
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 |
Name | Type | Description |
---|---|---|
kademlia.stabilizeDelay | numeric | kademlia parameters |
kademlia.removalDelay | numeric | number of timeouts before node removal |
kademlia.k | numeric | number of paths (size of k-bucket) |
kademlia.b | numeric | network diameter O(log_{2^(b)}) |
kademlia.s | numeric | number of siblings |
module KademliaModules 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 collectPerHopDelay : bool, // delay statistics for single hops drawOverlayTopology : bool, // draw arrow to successor node? hopCountMax : numeric, // maximum number of overlay hops joinOnApplicationRequest : bool, // only join the overlay on application // request useNextHopRpc : bool, // use RPCs for route messages useCommonAPIforward : bool, // enable CommonAPI forward() calls iterativeLookup : bool, // do iterative instead of recursive 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 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 submodules: kademlia: Kademlia; parameters: localPort = localPort, // UDP port for Kademlia messages debugOutput = debugOutput, // enable debug output keyLength = keyLength, // overlay key length in bits // only join the overlay on application request joinOnApplicationRequest = joinOnApplicationRequest, // gather statistics when bootstrapping measureNetwInitPhase = measureNetwInitPhase, // delay statistics for single hops collectPerHopDelay = collectPerHopDelay, // does nothing in kademlia drawOverlayTopology = drawOverlayTopology, hopCountMax = hopCountMax, // maximum number of overlay hops useNextHopRpc = useNextHopRpc, // use RPCs for route messages // enable CommonAPI forward() calls useCommonAPIforward = useCommonAPIforward, // do iterative instead of recursive iterativeLookup = iterativeLookup, // number of next hops in each step lookupRedundantNodes = lookupRedundantNodes, // number of parallel paths lookupParallelPaths = lookupParallelPaths, // number of nodes to ask in parallel lookupParallelRpcs = lookupParallelRpcs, // true, if all nodes should be identified with a ping lookupSecure = lookupSecure, // true, if parallel Rpc results should be merged lookupMerge = lookupMerge, // communicate failed Nodes lookupFailedNodeRpcs = lookupFailedNodeRpcs; display: "p=60,60;i=block/circle"; connections nocheck: from_udp --> kademlia.from_udp++; to_udp <-- kademlia.to_udp++; from_app --> kademlia.from_app; to_app <-- kademlia.to_app; endmodule