Compound Module BrooseModules

Package: oversim.overlay.broose
File: src/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, Ingmar Baumgart

BrooseBucket BrooseBucket BrooseBucket Broose

Usage diagram:

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram. Click here to see the full picture.

Inheritance diagram:

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram. Click here to see the full picture.

Parameters:

Name Type Default value Description
brooseShiftingBits int

number of bits shifted in/out each step

Gates:

Name Direction Size Description
udpIn input

gate from the UDP layer

udpOut output

gate to the UDP layer

tcpIn input

gate from the TCP layer

tcpOut output

gate to the TCP layer

appIn input

gate from the application

appOut output

gate to the application

Unassigned submodule parameters:

Name Type Default value Description
broose.rpcUdpTimeout double

default timeout value for direct RPCs

broose.rpcKeyTimeout double

default timeout value for routed RPCs

broose.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

broose.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

broose.localPort int

UDP port for overlay messages

broose.overlayId int

identifies the overlay this node belongs to (used for multiple overlays)

broose.debugOutput bool

enable debug output

broose.keyLength int

overlay key length in bits

broose.nodeId string

optional nodeId as string in hexadecimal notation

broose.useCommonAPIforward bool

enable CommonAPI forward() calls

broose.drawOverlayTopology bool

draw arrow to successor node?

broose.hopCountMax int

maximum number of overlay hops

broose.recNumRedundantNodes int

numRedundantNodes for recursive routing

broose.joinOnApplicationRequest bool

only join the overlay on application request

broose.collectPerHopDelay bool

delay statistics for single hops

broose.routeMsgAcks bool

use RPCs for route messages

broose.lookupRedundantNodes int

number of next hops in each step

broose.lookupParallelPaths int

number of parallel paths

broose.lookupParallelRpcs int

number of nodes to ask in parallel

broose.lookupVerifySiblings bool

true, if siblings need to be authenticated with a ping

broose.lookupMajoritySiblings bool

true, if sibling candidates are selected by a majority decision if using parallel paths

broose.lookupMerge bool

true, if parallel Rpc results should be merged

broose.lookupFailedNodeRpcs bool

communicate failed nodes

broose.lookupStrictParallelRpcs bool

limited the number of concurrent rpcs to parameter parallelRpcs

broose.lookupUseAllParallelResponses bool

merge all parallel responses from earlier steps

broose.lookupNewRpcOnEveryTimeout bool

send a new RPC immediately after an RPC timeouts

broose.lookupNewRpcOnEveryResponse bool

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

broose.lookupFinishOnFirstUnchanged bool

finish lookup, if the last pending RPC returned without progress

broose.lookupVisitOnlyOnce bool

if true, the same node is never asked twice during a single lookup

broose.lookupAcceptLateSiblings bool

if true, a FindNodeResponse with sibling flag set is always accepted, even if it is from a previous lookup step

broose.routingType string

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

broose.rejoinOnFailure bool

rejoin after loosing connection to the overlay?

broose.sendRpcResponseToLastHop bool

needed by KBR protocols for NAT support

broose.recordRoute bool

record visited hops on route

broose.dropFindNodeAttack bool

if node is malicious, it tries a findNode attack

broose.isSiblingAttack bool

if node is malicious, it tries a isSibling attack

broose.invalidNodesAttack bool

if node is malicious, it tries a invalidNode attack

broose.dropRouteMessageAttack bool

if node is malicious, it drops all received BaseRouteMessages

broose.measureAuthBlock bool

if true, measure the overhead of signatures in rpc messages

broose.restoreContext bool

if true, a node rejoins with its old nodeId and malicious state

broose.bucketSize int

number of nodes a bucket contains

broose.rBucketSize int

number of nodes a right-bucket contains

broose.joinDelay double

time to wait to join the overlay after simulation start

broose.userDist int

number of hops that are added to the estimated hop count

broose.refreshTime double

idle time after which a node is pinged

broose.numberRetries int

number of retries in case of timeout

broose.stab1 bool
broose.stab2 bool

Source code:

//
// 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, Ingmar Baumgart
//
module BrooseModules like IOverlay
{
    parameters:
        int brooseShiftingBits; // number of bits shifted in/out each step
    gates:
        input udpIn;    // gate from the UDP layer
        output udpOut;    // gate to the UDP layer
        input tcpIn;    // gate from the TCP layer
        output tcpOut;    // gate to the TCP layer
        input appIn;    // gate from the application
        output appOut;    // gate to the application
    submodules:
        rBucket[2^brooseShiftingBits]: BrooseBucket {
            parameters:
                @display("i=block/table;p=204,60");
        }
        lBucket: BrooseBucket {
            parameters:
                @display("p=360,60;i=block/table");
        }
        bBucket: BrooseBucket {
            parameters:
                @display("p=420,60;i=block/table");
        }
        broose: Broose {
            parameters:
                brooseShiftingBits = brooseShiftingBits;
                @display("p=60,60;i=block/circle");

        }
    connections allowunconnected:
        udpIn --> broose.udpIn;
        udpOut <-- broose.udpOut;
        appIn --> broose.appIn;
        appOut <-- broose.appOut;

}