Compound Module NiceModules

Package: oversim.overlay.nice
File: src/overlay/nice/Nice.ned

Implementation of the NICE overlay as described in "Scalable Application Layer Multicast" by S. Banerjee and B. Bhattacharjee and C. Kommareddy, published at SIGCOMM'02, 2002.

Author: Christian Huebsch

Nice

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.

Properties:

Name Value Description
display i=block/network2

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
nice.rpcUdpTimeout double

default timeout value for direct RPCs

nice.rpcKeyTimeout double

default timeout value for routed RPCs

nice.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

nice.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

nice.localPort int

UDP port for overlay messages

nice.overlayId int

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

nice.debugOutput bool

enable debug output

nice.keyLength int

overlay key length in bits

nice.nodeId string

optional nodeId as string in hexadecimal notation

nice.useCommonAPIforward bool

enable CommonAPI forward() calls

nice.drawOverlayTopology bool

draw arrow to successor node?

nice.hopCountMax int

maximum number of overlay hops

nice.recNumRedundantNodes int

numRedundantNodes for recursive routing

nice.joinOnApplicationRequest bool

only join the overlay on application request

nice.collectPerHopDelay bool

delay statistics for single hops

nice.routeMsgAcks bool

use RPCs for route messages

nice.lookupRedundantNodes int

number of next hops in each step

nice.lookupParallelPaths int

number of parallel paths

nice.lookupParallelRpcs int

number of nodes to ask in parallel

nice.lookupVerifySiblings bool

true, if siblings need to be authenticated with a ping

nice.lookupMajoritySiblings bool

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

nice.lookupMerge bool

true, if parallel Rpc results should be merged

nice.lookupFailedNodeRpcs bool

communicate failed nodes

nice.lookupStrictParallelRpcs bool

limited the number of concurrent rpcs to parameter parallelRpcs

nice.lookupUseAllParallelResponses bool

merge all parallel responses from earlier steps

nice.lookupNewRpcOnEveryTimeout bool

send a new RPC immediately after an RPC timeouts

nice.lookupNewRpcOnEveryResponse bool

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

nice.lookupFinishOnFirstUnchanged bool

finish lookup, if the last pending RPC returned without progress

nice.lookupVisitOnlyOnce bool

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

nice.lookupAcceptLateSiblings bool

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

nice.routingType string

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

nice.rejoinOnFailure bool

rejoin after loosing connection to the overlay?

nice.sendRpcResponseToLastHop bool

needed by KBR protocols for NAT support

nice.recordRoute bool

record visited hops on route

nice.dropFindNodeAttack bool

if node is malicious, it tries a findNode attack

nice.isSiblingAttack bool

if node is malicious, it tries a isSibling attack

nice.invalidNodesAttack bool

if node is malicious, it tries a invalidNode attack

nice.dropRouteMessageAttack bool

if node is malicious, it drops all received BaseRouteMessages

nice.measureAuthBlock bool

if true, measure the overhead of signatures in rpc messages

nice.restoreContext bool

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

nice.heartbeatInterval double
nice.maintenanceInterval double
nice.queryInterval double
nice.peerTimeoutHeartbeats double
nice.rpPollTimerInterval double
nice.clusterLeaderBound double
nice.clusterLeaderCompareDist double
nice.scProcDistance double
nice.scMinOffset double
nice.debug_clusterrefinement int
nice.debug_heartbeats int
nice.debug_visualization int
nice.debug_join int
nice.debug_peertimeouts int
nice.debug_removes int
nice.debug_queries int
nice.enhancedMode int
nice.startTime double
nice.k int

Source code:

//
// Implementation of the NICE overlay as described in
// "Scalable Application Layer Multicast" by
// S. Banerjee and B. Bhattacharjee and C. Kommareddy,
// published at SIGCOMM'02, 2002.
//
// @author Christian Huebsch
//
module NiceModules like IOverlay
{
    parameters:
        @display("i=block/network2");

    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:
        nice: Nice {
            parameters:
                @display("p=60,60");

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