Compound Module BrooseModules

File: Overlay/Broose/Broose.ned

Implementation of the Broose overlay as described in "Broose: A Practical Distributed Hashtable based on the De-Bruijn Topology" by A. Gai and L. Viennot, published in "Technical report, INRIA, june 2004"

Author: Jochen Schenk

rBucket: BrooseBucket lBucket: BrooseBucket bBucket: BrooseBucket broose: Broose

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.

Contains the following modules:

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

Broose

The main module of the Broose implementation

BrooseBucket

This modul contains the buckets of the Broose implementation.

Parameters:

Name Type Description
keyLength numeric

the length of overlay keys

localPort numeric

port on which the node is listening

debugOutput bool

debug output yes or no

iterativeLookup bool

do iterative instead of recursive lookups

useCommonAPIforward bool

enable CommonAPI forward() calls

joinOnApplicationRequest bool

only join the overlay on application request

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

shiftingBits numeric

number of bits shifted in/out each step

useNextHopRpc bool

use RPCs for route messages

hopCountMax numeric

maximum hop count for a lookup

measureNetwInitPhase bool

if true, some statistics are collected in init phase, too

collectPerHopDelay bool

delay statistics for single hops

drawOverlayTopology bool

draw arrow to successor node?

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

Unassigned submodule parameters:

Name Type Description
broose.bucketSize numeric

number of nodes a bucket contains

broose.rBucketSize numeric

number of nodes a right-bucket contains

broose.joinDelay numeric

time to wait to join the overlay after simulation start

broose.userDist numeric

number of hops that are added to the estimated hop count

broose.refreshTime numeric

time interval between two pings

broose.pingDelay numeric

time interval between bucket refreshs

broose.numberRetries numeric

number of retries in case of timeout

broose.parallelRequests numeric

number ob parallel requests

Source code:

module BrooseModules

    parameters:
        keyLength: numeric,    // the length of overlay keys
        localPort: numeric,    // port on which the node is listening
        debugOutput: bool,    // debug output yes or no
        iterativeLookup : bool,    // do iterative instead of recursive lookups
        useCommonAPIforward : bool,    // enable CommonAPI forward() calls
        joinOnApplicationRequest : bool,    // only join the overlay on application request

        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

        shiftingBits : numeric,    // number of bits shifted in/out each step

        useNextHopRpc : bool,            // use RPCs for route messages
        hopCountMax: numeric,    // maximum hop count for a lookup
        measureNetwInitPhase: bool,    // if true, some statistics are collected in init phase, too
        collectPerHopDelay : bool,    // delay statistics for single hops
        drawOverlayTopology: bool;    // draw arrow to successor node?

    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:
        rBucket : BrooseBucket[2^shiftingBits];
            display: "i=block/table";
        lBucket : BrooseBucket;
            display: "p=360,60;i=block/table";
        bBucket : BrooseBucket;
            display: "p=420,60;i=block/table";

        broose: Broose;
            parameters: 
                keyLength = keyLength,    // the length of overlay keys
                localPort = localPort,    // port on which the node is listening
                debugOutput = debugOutput,    // debug output yes or no
                iterativeLookup = iterativeLookup,    // do iterative instead of recursive lookups
                useCommonAPIforward = useCommonAPIforward,    // enable CommonAPI forward() calls
                joinOnApplicationRequest = joinOnApplicationRequest,    // only join the overlay on application request
                shiftingBits = shiftingBits,    // number of bits shifted in/out each step
                lookupRedundantNodes = lookupRedundantNodes,    // number of next hops in each step
                lookupParallelPaths = lookupParallelPaths,    // number of parallel paths
                lookupParallelRpcs = lookupParallelRpcs,     // number of nodes to ask in parallel
                lookupSecure = lookupSecure,    // true, if all nodes should be identified with a ping
                lookupMerge = lookupMerge,    // true, if parallel Rpc results should be merged
                lookupFailedNodeRpcs = lookupFailedNodeRpcs,    // communicate failed Nodes
                hopCountMax = hopCountMax,    // maximum hop count for a lookup
                measureNetwInitPhase = measureNetwInitPhase,    // if true, some statistics are collected in init phase, too
                collectPerHopDelay = collectPerHopDelay,    // delay statistics for single hops
                useNextHopRpc = useNextHopRpc,            // use RPCs for route messages
                drawOverlayTopology = drawOverlayTopology;    // draw arrow to successor node?
            display: "p=60,60;i=block/circle";

    connections nocheck:
        from_udp --> broose.from_udp++;
        to_udp <-- broose.to_udp++;
        from_app --> broose.from_app;
        to_app <-- broose.to_app;

endmodule