// // 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. // import "ChordFingerTable", "ChordSuccessorList", "Chord"; // // Implementation of the Chord KBR overlay as described in // "Chord: A Scalable Peer-to-Peer Lookup Protocol for Inetnet // Applications" by I. Stoica et al. published in Transactions on Networking. // // @author Ingmar Baumgart, Markus Mauch // module OverlayChord parameters: localPort : numeric, // UDP port for Chord messages debugOutput : bool, // enable debug output keyLength : numeric, // overlay key length in bits measureNetwInitPhase: bool, // gather statistics when bootstrapping drawOverlayTopology : bool, // draw arrow to successor node? hopCountMax : numeric, // maximum number of overlay hops lookupNumberNextHops : 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 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: chord: Chord; parameters: localPort = localPort, debugOutput = debugOutput, keyLength = keyLength, measureNetwInitPhase = measureNetwInitPhase, drawOverlayTopology = drawOverlayTopology, hopCountMax = hopCountMax, lookupNumberNextHops = lookupNumberNextHops, lookupParallelPaths = lookupParallelPaths, lookupParallelRpcs = lookupParallelRpcs, lookupSecure = lookupSecure, lookupMerge = lookupMerge; display: "p=60,60;i=block/circle"; fingerTable: ChordFingerTable; display: "p=150,60;i=block/table"; successorList: ChordSuccessorList; display: "p=240,60;i=block/table"; connections: from_udp --> chord.from_udp++; to_udp <-- chord.to_udp++; from_app --> chord.from_app; to_app <-- chord.to_app; endmodule