Compound Module PastryModules

Package: oversim.overlay.pastry
File: src/overlay/pastry/Pastry.ned

Implementation of the Pastry KBR overlay as described in "Pastry: Scalable, Decentralized Object Location, and Routing for Large-Scale Peer-to-Peer Systems" by Antony Rowstron and Peter Druschel, published in Lecture Notes in Computer Science, volume 2218.

Author: Felix Palmen

Pastry PastryRoutingTable PastryLeafSet PastryNeighborhoodSet

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.

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

default timeout value for direct RPCs

pastry.rpcKeyTimeout double

default timeout value for routed RPCs

pastry.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

pastry.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

pastry.localPort int

UDP port for overlay messages

pastry.overlayId int

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

pastry.debugOutput bool

enable debug output

pastry.keyLength int

overlay key length in bits

pastry.nodeId string

optional nodeId as string in hexadecimal notation

pastry.useCommonAPIforward bool

enable CommonAPI forward() calls

pastry.drawOverlayTopology bool

draw arrow to successor node?

pastry.hopCountMax int

maximum number of overlay hops

pastry.recNumRedundantNodes int

numRedundantNodes for recursive routing

pastry.joinOnApplicationRequest bool

only join the overlay on application request

pastry.collectPerHopDelay bool

delay statistics for single hops

pastry.routeMsgAcks bool

use RPCs for route messages

pastry.lookupRedundantNodes int

number of next hops in each step

pastry.lookupParallelPaths int

number of parallel paths

pastry.lookupParallelRpcs int

number of nodes to ask in parallel

pastry.lookupVerifySiblings bool

true, if siblings need to be authenticated with a ping

pastry.lookupMajoritySiblings bool

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

pastry.lookupMerge bool

true, if parallel Rpc results should be merged

pastry.lookupFailedNodeRpcs bool

communicate failed nodes

pastry.lookupStrictParallelRpcs bool

limited the number of concurrent rpcs to parameter parallelRpcs

pastry.lookupUseAllParallelResponses bool

merge all parallel responses from earlier steps

pastry.lookupNewRpcOnEveryTimeout bool

send a new RPC immediately after an RPC timeouts

pastry.lookupNewRpcOnEveryResponse bool

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

pastry.lookupFinishOnFirstUnchanged bool

finish lookup, if the last pending RPC returned without progress

pastry.lookupVisitOnlyOnce bool

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

pastry.lookupAcceptLateSiblings bool

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

pastry.routingType string

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

pastry.rejoinOnFailure bool

rejoin after loosing connection to the overlay?

pastry.sendRpcResponseToLastHop bool

needed by KBR protocols for NAT support

pastry.recordRoute bool

record visited hops on route

pastry.dropFindNodeAttack bool

if node is malicious, it tries a findNode attack

pastry.isSiblingAttack bool

if node is malicious, it tries a isSibling attack

pastry.invalidNodesAttack bool

if node is malicious, it tries a invalidNode attack

pastry.dropRouteMessageAttack bool

if node is malicious, it drops all received BaseRouteMessages

pastry.measureAuthBlock bool

if true, measure the overhead of signatures in rpc messages

pastry.restoreContext bool

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

pastry.enableNewLeafs bool

enable Pastry API call newLeafs()

pastry.optimizeLookup bool

whether to search the closest node in findCloserNode() calls

pastry.bitsPerDigit int

bits per Pastry digit

pastry.numberOfLeaves int

number of entries in leaf set

pastry.numberOfNeighbors int

number of entries in neighborhoot set

pastry.joinTimeout double

seconds to wait for STATE message from closest node

pastry.repairTimeout double

how long to wait for repair messages

pastry.useRegularNextHop bool
pastry.alwaysSendUpdate bool

tables delayed (should be very small)

pastry.readyWait double

seconds to wait for missing state messages in JOIN phase

pastry.proximityNeighborSelection bool

enable PNS ?

pastry.partialJoinPath bool

allow join even with missing state message along the routing path

pastry.useSecondStage bool
pastry.secondStageWait double

how long to wait before starting second stage of init phase

pastry.pingBeforeSecondStage bool
pastry.useDiscovery bool

join at nearest node, otherwise use bootstrapnode

pastry.minimalJoinState bool

use smaller join state msgs (as described in the 2nd Pastry paper)

pastry.sendStateAtLeafsetRepair bool

use state messages for leafset repair, otherwise use leafset messages

pastry.discoveryTimeoutAmount double

how long to wait for leafset pings in discovery stage

pastry.useRoutingTableMaintenance bool
pastry.routingTableMaintenanceInterval double

interval for periodic routing table maintenance

pastry.overrideOldPastry bool

pastry configuration according to the original paper

pastry.overrideNewPastry bool

optimized pastry configuration

Source code:

//
// Implementation of the Pastry KBR overlay as described in
// "Pastry: Scalable, Decentralized Object Location, and 
// Routing for Large-Scale Peer-to-Peer Systems" 
// by Antony Rowstron and Peter Druschel, published in 
// Lecture Notes in Computer Science, volume 2218.
//
// @author Felix Palmen
//
module PastryModules like IOverlay
{
    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:
        pastry: Pastry {
            parameters:
                @display("p=60,52;i=block/circle");
        }
        pastryRoutingTable: PastryRoutingTable {
            parameters:
                @display("p=140,68;i=block/table");
        }
        pastryLeafSet: PastryLeafSet {
            parameters:
                @display("p=220,52;i=block/table");
        }
        pastryNeighborhoodSet: PastryNeighborhoodSet {
            parameters:
                @display("p=300,68;i=block/table");

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

}