74 lines
3.2 KiB
Markdown
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.
|
|
|
|

|
|
|
|
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/.
|