All Projects → mwarning → MeshNetSimulator

mwarning / MeshNetSimulator

Licence: BSD-3-Clause license
A simulator for sketching mesh network routing strategies

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to MeshNetSimulator

meshviewer
Meshviewer - more in the README
Stars: ✭ 37 (-47.89%)
Mutual labels:  mesh-networks, freifunk, network-visualization
Netjsongraph.js
NetJSON NetworkGraph visualizer based on d3.js
Stars: ✭ 216 (+204.23%)
Mutual labels:  mesh-networks, mesh
yggmail
End-to-end encrypted email for the mesh networking age
Stars: ✭ 72 (+1.41%)
Mutual labels:  mesh-networks, mesh
Wireguard Private Networking
Build your own multi server private network using wireguard and ansible
Stars: ✭ 124 (+74.65%)
Mutual labels:  mesh-networks, mesh
Spruce Network
Decentralized peer-to-peer mesh network.
Stars: ✭ 61 (-14.08%)
Mutual labels:  mesh-networks, mesh
Yggdrasil Go
An experiment in scalable routing as an encrypted IPv6 overlay network
Stars: ✭ 1,007 (+1318.31%)
Mutual labels:  mesh-networks, mesh
Django Netjsongraph
Network Topology Visualizer & Network Topology Collector
Stars: ✭ 131 (+84.51%)
Mutual labels:  mesh-networks, mesh
Cjdns
An encrypted IPv6 network using public-key cryptography for address allocation and a distributed hash table for routing.
Stars: ✭ 4,766 (+6612.68%)
Mutual labels:  mesh-networks, mesh
Ergo
a Framework for creating mesh networks using technologies and design patterns of Erlang/OTP in Golang
Stars: ✭ 376 (+429.58%)
Mutual labels:  mesh-networks, mesh
Wifimeshraspberrypi
Workshop to create a sensor application over a WiFi Mesh network
Stars: ✭ 99 (+39.44%)
Mutual labels:  mesh-networks, mesh
Lime Packages
OpenWrt packages composing LibreMesh meta-firmware for wireless mesh networking
Stars: ✭ 204 (+187.32%)
Mutual labels:  mesh-networks, mesh
netmaker
Netmaker makes networks with WireGuard. Netmaker automates fast, secure, and distributed virtual networks.
Stars: ✭ 4,147 (+5740.85%)
Mutual labels:  mesh-networks, mesh
vyatta-cjdns
A cjdns package for Ubiquiti EdgeOS and VyOS, allowing cjdns to be used on EdgeRouters
Stars: ✭ 39 (-45.07%)
Mutual labels:  mesh-networks, mesh
edgevpn
⛵ The immutable, decentralized, statically built p2p VPN without any central server and automatic discovery! Create decentralized introspectable tunnels over p2p with shared tokens
Stars: ✭ 223 (+214.08%)
Mutual labels:  mesh-networks, mesh
Prototype Cjdns Pi
Prototype system for mesh networks on single board computers
Stars: ✭ 205 (+188.73%)
Mutual labels:  mesh-networks, mesh
everip
The Elastic Versatile Encrypted Relay for IP (EVER/IP) Networking Suite
Stars: ✭ 32 (-54.93%)
Mutual labels:  mesh-networks, mesh
Ansible Openwisp2
Ansible role that installs and upgrades OpenWISP.
Stars: ✭ 403 (+467.61%)
Mutual labels:  mesh-networks, mesh
Openwisp Network Topology
Network topology collector and visualizer. Collects network topology data from dynamic mesh routing protocols or other popular networking software like OpenVPN, allows to visualize the network graph, save daily snapshots that can be viewed in the future and more.
Stars: ✭ 67 (-5.63%)
Mutual labels:  mesh-networks, network-visualization
Multipeer
📱📲 A wrapper for the MultipeerConnectivity framework for automatic offline data transmission between devices
Stars: ✭ 170 (+139.44%)
Mutual labels:  mesh-networks
Quantumgate
QuantumGate is a peer-to-peer (P2P) communications protocol, library and API written in C++.
Stars: ✭ 62 (-12.68%)
Mutual labels:  mesh-networks

Mesh Network Routing Algorithm Simulator

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.

Overall Workflow

  1. Design algorithm
  2. Test algorithm (<= MeshNetSimulator)
  3. Code program
  4. Test on virtual hardware
  5. Test on real hardware

How to Use

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.

Command Line

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>]
    Set current routing algorithm or print list of available algorithms.
  • sim_step [<steps>]
    Run simulation steps. Default is 1.
  • sim_reset
    Reset simulator state.
  • sim_info
    Show simulator state.
  • progress <true|false>
    Show simulation progress.
  • test [<samples>]
    Test routing algorithm with optional sample size.
    Does not change node state.
  • debug_init <source> <target>
    Debug routing path from source to target.
    Does not change node state.
  • debug_step
    Perform a routing step on the path that was initialized.
    Does not change node state.

Graph info:

  • graph_info
    Show graph state.
  • get <key>
    Get node property.
  • set <key> <value>
    Set node property.

Graph topology:

  • graph_clear
    Clear graph.
  • line <node_count> <create_loop>
    Add a line of nodes. Connect ends to create a loop.
  • star <edge_count>
    Add star structure of nodes.
  • tree <node_count> [<inter_count>]
    Add a tree structure of nodes with interconnections
  • lattice4 <x_xount> <y_count>
    Create a lattice structure of squares.
  • lattice8 <x_xount> <y_count>
    Create a lattice structure of squares and diagonal connections.
  • remove_nodes <node_list>
    Remove nodes. Node list is a comma separated list of node ids.
  • connect_nodes <node_list>
    Connect nodes. Node list is a comma separated list of node ids.
  • disconnect_nodes <node_list>
    Disconnect nodes. Node list is a comma separated list of node ids.
  • remove_unconnected
    Remove nodes without any connections.

Graph positions:

  • positions <true|false>
    Enable geo positions.
  • move_node <node_id> <x> <y> <z>
    Move a node by x/y/z (in km).
  • move_nodes <x> <y> <z>
    Move all nodes by x/y/z (in km).
  • move_to <x> <y> <z>
    Move all nodes to x/y/z (in degrees).
  • rnd_pos <range>
    Randomize node positions in an area with width (in km) around current node center.
  • connect_in_range <range>
    Connect all nodes in range of less then range (in km).

Meta:

  • run <file>
    Run commands from a script.
  • import <file>
    Import a graph as JSON file.
  • export <file>
    Export a graph as JSON file.
  • show_mst
    Mark the minimum spanning tree.
  • crop_mst
    Only leave the minimum spanning tree.
  • exit
    Exit simulator.
  • help
    Show this help.

Build Program

Use cargo build or cargo run to build the project. Cargo is the Rust package manager and build tool.

Similar Software

Big Projects

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/

Small Projects

MLC: Use lxc containers to simulate mesh networks.

Network Mesh Emulator: Use VirtualBox images with OpenWrt.

Various Links

Various Scientific Papers

A collection of scientific papers somewhat related to Mobile Ad-Hoc Mesh Routing.

Mesh Radio Projects

A collection of projects.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].