// // 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