reticulum-synthesis/README.md

74 lines
3.2 KiB
Markdown

# Reticulum Synthesis
A simple program to generate and run random topologies of [Reticulum](https://reticulum.network) 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.](graph.svg)
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.](https://rustup.rs)
```bash
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:
```bash
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](https://liberapay.com/tuxmain/donate)
GNU AGPL v3, CopyLeft 2025 Pascal Engélibert [(why copyleft?)](https://txmn.tk/blog/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/.