C++ definition: click here
The main module of the Kademlia implementation
Author: Sebastian Mies, Ingmar Baumgart, Bernhard Heep
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram. Click here to see the full picture.
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram. Click here to see the full picture.
| BaseOverlay (simple module) |
Base class for overlay implementations |
If a module type shows up more than once, that means it has been defined in more than one NED file.
| KademliaModules (compound module) |
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" |
| Name | Type | Default value | Description |
|---|---|---|---|
| rpcUdpTimeout | double |
default timeout value for direct RPCs |
|
| rpcKeyTimeout | double |
default timeout value for routed RPCs |
|
| rpcExponentialBackoff | bool |
if true, doubles the timeout for every retransmission |
|
| localPort | int |
UDP port for Chord messages |
|
| debugOutput | bool |
enable debug output |
|
| keyLength | int |
overlay key length in bits |
|
| nodeId | string |
optional nodeId as string in hexadecimal notation |
|
| useCommonAPIforward | bool |
enable CommonAPI forward() calls |
|
| drawOverlayTopology | bool |
draw arrow to successor node? |
|
| hopCountMax | int |
maximum number of overlay hops |
|
| recNumRedundantNodes | int |
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 | int |
number of next hops in each step |
|
| lookupParallelPaths | int |
number of parallel paths |
|
| lookupParallelRpcs | int |
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 |
|
| lookupVisitOnlyOnce | bool |
if true, the same node is never asked twice during a single lookup |
|
| routingType | string |
default routing mode (iterative, semi-recursive,...) |
|
| rejoinOnFailure | bool |
rejoin after loosing connection to the overlay? |
|
| recordRoute | bool |
record visited hops on route |
|
| minSiblingTableRefreshInterval | double |
siblingTable refresh delay |
|
| minBucketRefreshInterval | double |
bucket refresh delay |
|
| maxStaleCount | int |
number of timeouts before node removal |
|
| k | int |
number of paths (size of k-bucket) |
|
| b | int |
network diameter O(log_{2^(b)}) |
|
| s | int |
number of siblings |
|
| exhaustiveRefresh | bool |
if true, use exhaustive-iterative lookups to refresh buckets |
|
| pingNewSiblings | bool |
ping new unknown siblings? |
|
| activePing | bool |
remove the following before release: |
|
| proximityRouting | bool | ||
| proximityNeighborSelection | bool | ||
| altRecMode | bool |
| Name | Value | Description |
|---|---|---|
| class | Kademlia | |
| display | i=block/circle |
| Name | Direction | Size | Description |
|---|---|---|---|
| udpIn | input |
gate from the UDP layer |
|
| udpOut | output |
gate to the UDP layer |
|
| appIn | input |
gate from the application |
|
| appOut | output |
gate to the application |
|
| direct_in | input |
gate for sendDirect |
// // The main module of the Kademlia implementation // // @author Sebastian Mies, Ingmar Baumgart, Bernhard Heep // simple Kademlia extends BaseOverlay { parameters: @class(Kademlia); double minSiblingTableRefreshInterval @unit(s); // siblingTable refresh delay double minBucketRefreshInterval @unit(s); // bucket refresh delay int maxStaleCount; // number of timeouts before node removal int k; // number of paths (size of k-bucket) int b; // network diameter O(log_{2^(b)}) int s; // number of siblings bool exhaustiveRefresh; // if true, use exhaustive-iterative lookups to refresh buckets bool pingNewSiblings; // ping new unknown siblings? //remove the following before release: bool activePing; // ping new neighbors? bool proximityRouting; bool proximityNeighborSelection; bool altRecMode; }