java.lang.Object
net.i2p.router.MultiRouter

public class MultiRouterextends Object
Fire up multiple routers in the same VM, all with their own RouterContext (and all that entails). In addition, this creates a root I2PAppContext for any objects not booted through one of the RouterContexts. Each of these contexts are configured through a simple properties file (where the name=value contained in them are used for the context's getProperty(name)).

Usage:

MultiRouter numberRouters

Each routerContext specified is used to boot up a single router. It is HIGHLY recommended that those context files contain a few base env properties:

  • loggerFilenameOverride=rN/logs/log-router-#.txt
  • router.configLocation=rN/router.config
(where "rN" is an instance number, such as r0 or r9).

Optionally, i2p.vmCommSystem=true can be enabled.

i2p.vmCommSystem=true tells the router to use an in-VM comm system for sending messages back and forth between routers (see net.i2p.transport.VMCommSystem).

However, the default comm system implementation is usually preferred since enabling the VMCommSystem will bypass UDP and TCP, and therefore will not provide a test bed for many important I2P systems.

To make the router console work, either run from a directory containing lib/, webapps/, docs/, etc., or point i2p.dir.base to a directory containing the above.

The multirouter waits until all of the routers are shut down (which none will do on their own, so as before, you'll want to kill the proc or ^C it).

  • Field Details

    • BASE_PORT

      private static final int BASE_PORT
      First port given to the test routers.
      See Also:
    • nbrRouters

      private static int nbrRouters
      Number of test routers to run.
    • out

      private static PrintStream out
      Stream for the test output.
    • routers

      private static ArrayList<Router> routers
      The test routers running.
    • _defaultContext

      private static I2PAppContext _defaultContext
      The default context shared by the test routers.
  • Constructor Details

    • MultiRouter

      public MultiRouter()
      The router list, the default context and the output stream are all static and are set by main(String[]), so an instance carries no state.
  • Method Details

    • main

      public static void main(String[] args)
      Boot the requested number of routers from the given arguments.
      Parameters:
      args - the command line, whose first element is the number of routers to boot; usage is printed when it is absent or not a positive integer
    • internalReseed

      private static void internalReseed()
      Reseeds the test routers in the background.
    • buildRouterProps

      private static Properties buildRouterProps(int id)
      Writes the router config file for one test router.
      Parameters:
      id - the router number
      Returns:
      the properties written
    • getRouterProps

      private static Properties getRouterProps(int id)
      Reads the router config file for one test router.
      Parameters:
      id - the router number
      Returns:
      the properties read
    • buildClientProps

      private static Properties buildClientProps(int id)
      Writes the client config file for one test router.
      Parameters:
      id - the router number
      Returns:
      the properties written
    • getClientProps

      private static Properties getClientProps()
      Reads the client config file.
      Returns:
      the properties read
    • getBaseDir

      private static String getBaseDir(int id)
      The data directory for one test router.
      Parameters:
      id - the router number
      Returns:
      the directory path
    • waitForCompletion

      private static void waitForCompletion()
      Waits for all the test routers to exit.
    • usage

      private static void usage()
      Prints the command line usage.