// // 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. // // // The main module of the Kademlia implementation // // @author Sebastian Mies // simple Kademlia parameters: // base overlay parameters localPort : numeric, // UDP port for Kademlia messages debugOutput : bool, // enable debug output keyLength : numeric, // overlay key length in bits drawOverlayTopology : bool, // draw arrow to successor node? hopCountMax : numeric, // maximum number of overlay hops joinOnApplicationRequest : bool ,// only join the overlay on application // request useCommonAPIforward : bool, // enable CommonAPI forward() calls routeMsgAcks : bool, // use RPCs for route messages recNumRedundantNodes : numeric, // numRedundantNodes for recursive routing // lookup parameters 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 lookupStrictParallelRpcs: bool, // limited the number of concurrent rpcs to parameter parallelRpcs lookupUseAllParallelResponses: bool, // merge all parallel responses from earlier steps lookupNewRpcOnEveryTimeout: bool, // send a new RPC immediately after an RPC timeouts lookupNewRpcOnEveryResponse: bool, // send a new RPC after every response, even if there was no progress lookupFinishOnFirstUnchanged: bool, // finish lookup, if the last pending RPC returned without progress lookupFailedNodeRpcs : bool, // communicate failed nodes lookups routingType : string, // default routing mode (iterative, semi-recursive,...) collectPerHopDelay : bool, // delay statistics for single hops // kademlia parameters minSiblingTableRefreshInterval : numeric, // siblingTable refresh delay minBucketRefreshInterval : numeric, // bucket refresh delay maxStaleCount : numeric, // number of timeouts before // node removal k : numeric, // number of paths (size of k-bucket) b : numeric, // network diameter O(log_{2^(b)}) s : numeric, // number of siblings pingNewSiblings : bool, // ping new unknown siblings? activePing : bool; // ping new neighbors? 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 in: direct_in; // gate for sendDirect endsimple // // Implementation of the Kademlia DHT overlay as described in // "Kademlia: A peer-to-peer information system based on the XOR metric" // by P. Maymounkov and D. Mazieres, published in "In Proceedings of IPTPS02" // // @author Sebastian Mies // module KademliaModules 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: kademlia: Kademlia; display: "p=60,60;i=block/circle"; connections nocheck: from_udp --> kademlia.from_udp++; to_udp <-- kademlia.to_udp++; from_app --> kademlia.from_app; to_app <-- kademlia.to_app; endmodule