File Overlay/Vast/OverlayVast.ned

Contains:

//
// Copyright (C) 2006 Institut fuer Telematik, Universitaet Karlsruhe (TH)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//

// @file OverlayVast.ned
// @author Helge Backhaus
//

import
    "NeighborsList",
    "Vast";
//
// Implementation of the Vast overlay as described in
// "Scalable peer-to-peer networked virtual environment"
// by S.-Y. Hu and G.-M. Liao, published in NetGames �04:
// Proceedings of 3rd ACM SIGCOMM workshop on
// Network and system support for games, pages
//
// @author Ingmar Baumgart, Markus Mauch
//
module OverlayVast
    parameters:
        localPort: numeric,    // UDP port for Vast messages
        debugOutput: bool,    // enable debug output
        keyLength : numeric,    // overlay key length in bits
        measureNetwInitPhase: bool,    // gather statistics when bootstrapping
        useCommonAPIforward : bool,      // enable CommonAPI forward() calls
        collectPerHopDelay : bool,    // delay statistics for single hops
        drawOverlayTopology : bool,    // draw arrow to successor node?
        hopCountMax : numeric,    // maximum number of overlay hops
        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
        useNextHopRpc : bool,            // use RPCs for route messages

        useBaseLookup : bool,    // use the base lookup class
        iterativeLookup : bool,    // do iterative instead of recursive lookups

        debugVastOutput: bool,
        ignoreFalseKeys: bool,
        AOIWidth: numeric,
        joinTimeout: numeric,
        pingTimeout: numeric;

    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:
        vast: Vast;
            parameters:
                localPort=localPort,    // UDP port for Vast messages
                debugOutput=debugOutput,    // enable debug output

                keyLength=keyLength,    // overlay key length in bits
                measureNetwInitPhase=measureNetwInitPhase,    // gather statistics when bootstrapping
                collectPerHopDelay=collectPerHopDelay,    // delay statistics for single hops
                drawOverlayTopology=drawOverlayTopology,    // draw arrow to successor node?
                hopCountMax=hopCountMax,    // maximum number of overlay hops
                joinOnApplicationRequest=joinOnApplicationRequest,    // only join the overlay on application request
                useCommonAPIforward = useCommonAPIforward,
                useNextHopRpc = useNextHopRpc, // use RPCs for route messages

                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
                lookupRedundantNodes=lookupRedundantNodes,     // number of next hops in each step

                useBaseLookup=useBaseLookup,    // use the base lookup class
                iterativeLookup=iterativeLookup,    // do iterative instead of recursive lookups

                debugVastOutput=debugVastOutput,
                ignoreFalseKeys=ignoreFalseKeys,
                AOIWidth=AOIWidth,
                joinTimeout=joinTimeout,
                pingTimeout=pingTimeout;
            display: "p=60,60;i=block/circle";

        neighborsList: NeighborsList;
            display: "p=180,60;i=block/table";

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