Jump to navigation Jump to search

The Berlin RoofNet Simulator (Brn.Sim) is wireless mesh network simulator based on JiST/SWANS. The current version can be found in the sar-svn repository (svn://sar-svn/BerlinRoofNet/trunk/simulation/brn.sim).

Brn.Sim Core

Simulator Core

Physical Layers

IEEE 802.11abg Physical Layer

  • Models for IEEE 802.11b (DSSS) and a/g (OFDM)
  • BER Model from yans, ns-3
  • Shadowing and Fading (both correlated/uncorrelated in time) from ns-2/SWAN/GloMoSim
    • TODO spatially correlated shadowing
  • Propagation Delay Model
  • Transmit Diversity Model
  • Brn.Phy

IEEE 802.11abg Multi-Channel Support


IEEE 802.11abg Multi-Bit-Rate Support and Bit-Rate Selection


IEEE 802.11e


Brn.Click: Integration of the Click Modular Router API



Brn.Gui running a simulation with 500 nodes.

The Brn.Gui is a user interface for the Brn.Sim simulator. It is able to control the simulation execution like a debugger. It visualizes simulation results which are specified in simulation code via the Brn.Measure framework. Furthermore, it is also a result browser for already completed simulations which were executed by the Brn.DistSim distributed simulation framework and stored in the Brn.Db storage. For details see Brn.Gui



Brn.Db and Brn.DistSim

DistSim is a framework for defining, executing and collecting the results of multiple similar simulations. Core component is the Wrapper, which obtains simulation definitions from a database and executes it. Furthermore, there are JMX Mbeans for the distributed management of wrapper instances.

Brn.Distsim accessed via the HTTP interface of the JMX MBeans.
Brn.Distsim accessed via the Brn.Gui (JMX Eclipse plugin).

Steps to start the distsim framework

  • Check out the wrapper from [1]
  • Build and run via "ant run-jmx". Remember to set an unused RMI Registry port with "-Dbrn.distsim.jmxremote.port=xxxxx". If you want to access the HTTP console, specify an unused port via "-Dbrn.distsim.jmxremote.http.port=xxxx".
  • Access the Brn.DistsimManager via HTTP or another JMX Client (JConsole, JMX Eclipse Plugin, VisualVM). In the Agent View, you will see the Distsim manager and the Wrapper manager MBean within the domain brn.distsim.jmx.
  • Now, you are able to set up a federated Brn.Distsim service. Simply start another Brn.Distsim on a remote computer. Go to the local Distsim manager and execute the operation addDistsim. If the operation succeeds, you will see the Distsim manager within the property ActiveDistsims of the local Distsim manager. Be careful not to create loops; the result will be undefined.
  • To start wrappers, go to the Distsim manager MBean and invoke the operation "startWrapper". Specify the database connection information, the host to start wrappers on (with optional ":port"), the first id to use with the wrappers (idStart) and the number of wrappers to start on this node (number).
  • To start wrappers on multiple hosts simultaneously, use the operation "startWrapperAll". The parameter "startString" must be an enumeration of the form 'host[:port] idStart:number'.
  • Use the operation "stopWrapper" or "stopWrapperAll" to stop the wrapper after a simulation run.
  • The federated service is shut down via "stopDistsimAll".

  • Note: The Wrapper do have a lot of caches on the file system. Please restart the wrappers for each new study and/or version to purge all caches.

Starting the Brn.DistsimReports Viewer

Brn.DistsimReports at work
  • Brn.DistsimReports is a basic viewer for simulation reports. You can find it in [2].
  • To use it, download and install JBoss [3]. Furthermore, you need the Eclipse BIRT Runtime [4]. Details about installing the BIRT runtime can be found here.
  • The report engine tries to connect to a local mysql data source. A mysql jdbc driver must be available and placed under

${JBOSS_DEPLOY}/birt.war/WEB-INF/platform/plugins/ (see here for details).

  • When starting JBoss, do not forget to specify "-Djboss.bind.address=x.x.x.x" in order to access the JBoss from outer space.

Scenario Creation via Brn.Builders


Do not forget to define Getter/Setter for each Member of the Parameter Class!


Related Projects