Skip to content
Sinalgo is a simulation framework for testing and validating network algorithms
Java Perl
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
demo_scripts Relocating the automation script for sample 1 May 11, 2018
gradle/wrapper Upgrade Gradle wrapper, add Java 11 compatibility Jun 12, 2019
icon Using bicubic resampling in place or bicubic-sharper for larger sizes May 6, 2018
src/main
.gitignore
LICENSE New help mechanism and web pages being parameterized Jun 7, 2018
README.md New help mechanism and web pages being parameterized Jun 7, 2018
VERSION Upgrade Gradle wrapper, add Java 11 compatibility Jun 12, 2019
WEB_PAGE_URL New help mechanism and web pages being parameterized Jun 7, 2018
WEB_REPOSITORY_URL
build.gradle Upgrade Gradle wrapper, add Java 11 compatibility Jun 12, 2019
gradlew Temporarily submitting work on the classpath scanning (3) Apr 30, 2018
gradlew.bat Switching to using Gradle to build and run the application. Apr 8, 2018
settings.gradle Changing help/doc URL and normalizing Sinalgo's name in the docs Apr 8, 2018

README.md

Sinalgo - Simulator for Network Algorithms

Welcome to Sinalgo

Sinalgo is a simulation framework for testing and validating network algorithms. Unlike most other network simulators, which spend most time simulating the different layers of the network stack, Sinalgo focuses on the verification of network algorithms, and abstracts from the underlying layers: It offers a message passing view of the network, which captures well the view of actual network devices. Sinalgo was designed, but is not limited to simulate wireless networks.

The key to successful development of network algorithms is a comprehensive test suite. Thanks to the fast algorithm prototyping in JAVA, Sinalgo offers itself as a first test environment, prior to deploy the algorithm to the hardware. Prototyping in JAVA instead of the hardware specific language is not only much faster and easier, but also simplifies debugging. Sinalgo offers a broad set of network conditions, under which you may test your algorithms. In addition, Sinalgo may be used as a stand­alone application to obtain simulation results in network algorithms research.

Sinalgo's view of network devices is close to the view of real hardware devices (e.g. in TinyOS): A node may send a message to a specific neighbor or all its neighbors, react to received messages, set timers to schedule actions in the future, and much more.

Some of the key features of Sinalgo:

  • Quick prototyping of your network algorithms in JAVA
  • Straight forward extensibility to cover nearly any simulation scenario
  • Many built-in, but still adjustable plug­ins
  • High performance - run simulations with 100000s of nodes in acceptable time
  • Support for 2D and 3D
  • Asynchronous and synchronous simulation
  • Customizable visualization of the network graph
  • Platform independent - the project is written in Java
  • Sinalgo is for free, published under a BSD license

To guarantee easy extensibility, Sinalgo offers a set of extension points, the so called models. The following list gives an overview of the available models, to each of which you may add your own extension. To facilitate your life, Sinalgo ships with a set of frequently used models.

  • The mobility model describes how the nodes change their position over time. Examples are random waypoint, random walk, random direction, and many others.
  • The connectivity model defines when two nodes are in communication range. The best known examples are the unit disk graph (UDG) and the quasi­UDG (QUDG).
  • The distribution model is responsible to initially place the network nodes in the simulation area. E.g. place the nodes randomly, evenly distributed on a line or grid or according to a stationary regime of a mobility model.
  • Use the interference model to define whether simultaneous message transmissions may interfere.
  • The reliability model is a simplified form of the interference model and lets you define for every message whether it should arrive or not. E.g. drop one percent of all messages.
  • Last but not least, the transmission model lets you define how long a message takes until it arrives at its destination.

DISCLAIMER: Sinalgo was originally developed by the DCG (Distributed Computing Group) at ETHzürich.

Installation and usage

Sinalgo has been ported to use the Gradle build system beginning with version 0.77. It uses a Gradle Wrapper so users don't have to download the specific Gradle version that's compatible with Sinalgo. Running and building Sinalgo is as simple as running:

./gradlew run 

If you need to pass command line arguments, you can use the following syntax:

./gradlew run -PappArgs="['arg1', 'arg2', 'arg3']"

And so on. As an example, the following command will run the sample2 project straight from the command line, skipping the project selector window.

./gradlew run -PappArgs="['-project', 'sample2']"

When using Windows, replace ./gradlew with gradlew.bat.

That will downloaded whichever Gradle version Sinalgo needs, build the application and run it. That includes all projects.

Gradle includes a ton of functionality. Some plugins being used here provide some nice resources not provided by Gradle by default.

Right now, the following commands might be useful:

  • ./gradlew build will build a zip for distribution plus a jar with every dependency needed to run Sinalgo.

  • ./gradlew javadoc will generate a set of HTML documents containing documentation on Sinalgo's classes. This also includes projects.

Tutorial

Sinalgo's original tutorial has been reconstructed in the GitHub Pages for this repository. While this fork has departed quite a bit from the original, most of the things in the tutorial are still valid as for building simulations and the general usage of Sinalgo.

You can’t perform that action at this time.