reticulum-synthesis/README.md

3.2 KiB

Reticulum Synthesis

A simple program to generate and run random topologies of Reticulum networks on local UDP.

The purpose is to test routing and applications easily.

Graph of 50 nodes, with some highly connected clusters and more isolated parts.

You can contact tuxmain on the Reticulum Matrix channel for any request.

Development status: Early development, just for fun, to tinker with Reticulum and learn about mesh networks.

Build

Install Rust.

cargo build --release
./target/release/reticulum-synthesis --help

Python and rnsd must already be installed (and in PATH), see Reticulum's manual.

Use

Generate and run 10 local Reticulum nodes:

reticulum-synthesis -d /tmp/test -n 10 --gen --run

Option --gen (or -g) generates the network graph and creates the directories and config files as subdirectories in the directory passed to -d. Subdirectories are named from n0 to n9 in the example.

Option --run (or -r) runs the generated nodes using rnsd. (tries to run for any subdirectory in the directory passed to -d)

Tune the graph density with the -p <float> option that accepts an edge probability number between 0 and 1.

When generating a graph, option -R <path> renders the graph to an SVG image. (may take some time to compute, depending on the number of nodes)

The network can then be tested using RNS tools: (from reticulum repository)

$ python Examples/Announce.py --config /tmp/test/n5
[2025-10-11 11:04:43] [Notice]   Announce example running, hit enter to manually send an announce (Ctrl-C to quit)

[2025-10-11 11:04:45] [Notice]   Sent announce from <0e1fb61e3b38e332868b331740642f41> (example_utilities.announcesample.fruits.dd5be4f7c7547eaa41f654f75005ea36)
[2025-10-11 11:04:45] [Notice]   Sent announce from <e733d5322f4f80a26a41c20d77fa89c8> (example_utilities.announcesample.noble_gases.dd5be4f7c7547eaa41f654f75005ea36)

# In another terminal:
$ python RNS/Utilities/rnpath.py --config /tmp/test/n10 0e1fb61e3b38e332868b331740642f41
Path found, destination <0e1fb61e3b38e332868b331740642f41> is 4 hops away via <11d3d5adc157e01df45660569a40b458> on UDPInterface[e10_33/127.0.0.1:42182]

For now, UDP ports are allocated to links in order from 42000 to 65535.

The graph can also be read from a text file listing edges, using option -G <path>. An edge is a space-separated list of two node indices. Separation can be any whitespace character. Example:

0 1
1 2
2 0
1 3
3 4

License

Support me via LiberaPay

GNU AGPL v3, CopyLeft 2025 Pascal Engélibert (why copyleft?)

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.