A simulator for sketching mesh network routing strategies
Currently not maintained - I write routing protocols in C now and use my emulator.
This is a simple discrete event simulator for sketching mesh network routing strategies in the hopes to find better approaches to mesh routing. Please note that this simulator does not virtualize a TCP/IP stack nor all characteristics of wireless connections. The dynamic nature of MANETs is also not (yet) covered by this simulator.
The simulator is controled via a command line that can also be reached over a network. The output from the simulator is a json files and can be displayed using the Mesh Graph Viewer.
The motivation for this project is that community networks such as Freifunk struggle with scaling issues of their MANETs. The cause is management traffic caused by hundreds of nodes. But testing new algorithms for scalability is a problem since many nodes are required. That is what this high speed simulator is helping with.
Also part of this repository are basic information about mesh routing protocols.
Note: While some routing algorithms have been implemented. Most of them are not in a working state right now.
Run the program and use the command line commands to create/load a topology. Then select a routing algorithm, perform a few simulation steps and run the test command.
$ mkdir ~/simulation
$ cd simulation
$ ./MeshNetSimulator-amd64-linux
Listen for commands on 127.0.0.1:8011
Every time toplogy or node state changes, a new graph.json
file is written. You can use the GraphViewer frontend to visualize the topology and node states:
$ ./MeshNetViewer-amd64-linux ~/simulation/graph.json --call tcp://127.0.0.1:8011 --config config.json --open
Now the web browsers opens and commands can be passed to the MeshNetSimulator from the command line in the web browser interface. Results will be displayed.
The interactive command line allows to control the routing simulator. It is accessible from the terminal and via TCP/UDP/Unix socket.
Simulation:
algo [<name>]
sim_step [<steps>]
sim_reset
sim_info
progress <true|false>
test [<samples>]
debug_init <source> <target>
debug_step
Graph info:
graph_info
get <key>
set <key> <value>
Graph topology:
graph_clear
line <node_count> <create_loop>
star <edge_count>
tree <node_count> [<inter_count>]
lattice4 <x_xount> <y_count>
lattice8 <x_xount> <y_count>
remove_nodes <node_list>
connect_nodes <node_list>
disconnect_nodes <node_list>
remove_unconnected
Graph positions:
positions <true|false>
move_node <node_id> <x> <y> <z>
move_nodes <x> <y> <z>
move_to <x> <y> <z>
rnd_pos <range>
connect_in_range <range>
Meta:
run <file>
import <file>
export <file>
show_mst
crop_mst
exit
help
Use cargo build
or cargo run
to build the project. Cargo is the Rust package manager and build tool.
OMNeT++: OMNeT++ is an extensible, modular, component-based C++ simulation library and framework, primarily for building network simulators.
ns-3: ns-3 is a discrete-event network simulator for Internet systems, targeted primarily for research and educational use.
EMANE: Extendable Mobile Ad-hoc Network Emulator.
http://www.brianlinkletter.com/open-source-network-simulators/
MLC: Use lxc containers to simulate mesh networks.
Network Mesh Emulator: Use VirtualBox images with OpenWrt.
Primer on wireless mesh routing algorithms Review on Routing Algorithms in Wireless Mesh Networks
Ask Slashdot: Could We Build A Global Wireless Mesh Network?
Contains an overview of different mesh routing strategies: From MANET To IETF ROLL Standardization: A Paradigm Shift in WSN Routing Protocols
A collection of scientific papers somewhat related to Mobile Ad-Hoc Mesh Routing.
A collection of projects.