diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index ec9f9ce..8d81b4d 100644 Binary files a/docs/Reticulum Manual.pdf and b/docs/Reticulum Manual.pdf differ diff --git a/docs/manual/_sources/gettingstartedfast.rst.txt b/docs/manual/_sources/gettingstartedfast.rst.txt index 6bbcf5f..b13e02b 100644 --- a/docs/manual/_sources/gettingstartedfast.rst.txt +++ b/docs/manual/_sources/gettingstartedfast.rst.txt @@ -86,7 +86,7 @@ Creating a Network With Reticulum ============================================= To create a network, you will need to specify one or more *interfaces* for Reticulum to use. This is done in the Reticulum configuration file, which by -default is located at ``~/.config/reticulum/config``. You can edit this file by hand, +default is located at ``~/.reticulum/config``. You can edit this file by hand, or use the interactive ``rnsconfig`` utility. When Reticulum is started for the first time, it will create a default @@ -261,7 +261,7 @@ don't use pip, but try this recipe: # Unless you've manually created a config file, Reticulum will do so now, # and immediately exit. Make any necessary changes to the file: - nano ~/.config/reticulum/config + nano ~/.reticulum/config # ... and launch the example again. python3 Examples/Echo.py -s diff --git a/docs/manual/_sources/networks.rst.txt b/docs/manual/_sources/networks.rst.txt index 5c9a049..f818771 100644 --- a/docs/manual/_sources/networks.rst.txt +++ b/docs/manual/_sources/networks.rst.txt @@ -82,7 +82,7 @@ communications channels as the underlying carrier for Reticulum. However, most real-world networks will probably involve either some form of wireless or direct hardline communications. To allow Reticulum to communicate over any type of medium, you must specify it in the configuration file, by default -located at ``~/.config/reticulum/config``. See the :ref:`Supported Interfaces` +located at ``~/.reticulum/config``. See the :ref:`Supported Interfaces` chapter of this manual for interface configuration examples. Any number of interfaces can be configured, and Reticulum will automatically diff --git a/docs/manual/_sources/using.rst.txt b/docs/manual/_sources/using.rst.txt index 71d11c6..76673c0 100644 --- a/docs/manual/_sources/using.rst.txt +++ b/docs/manual/_sources/using.rst.txt @@ -7,9 +7,11 @@ Using Reticulum on Your System Reticulum is not installed as a driver or kernel module, as one might expect of a networking stack. Instead, Reticulum is distributed as a Python module. This means that no special privileges are required to install or use it. It -is also very light-weight, and easy to transfer to and install on new systems. -Any program or application that uses Reticulum will automatically load and -initialise Reticulum when it starts. +is also very light-weight, and easy to transfer to, and install on new systems. + +When you have Reticulum installed, any program or application that uses Reticulum +will automatically load and initialise Reticulum when it starts, if it is not +already running. In many cases, this approach is sufficient. When any program needs to use Reticulum, it is loaded, initialised, interfaces are brought up, and the @@ -22,11 +24,22 @@ are other options. Configuration & Data -------------------- -A Reticulum stores all information that it needs to function in a single file- -system directory. By default, this directory is ``~/.config/reticulum``, but you can -use any directory you wish. You can also run multiple separate Reticulum -instances on the same physical system, in complete isolation from each other, -or connected together. +Reticulum stores all information that it needs to function in a single file-system +directory. When Reticulum is started, it will look for a valid configuration +directory in the following places: + +- ``/etc/reticulum`` +- ``~/.config/reticulum`` +- ``~/.reticulum`` + +If no existing configuration directory is found, the directory ``~/.reticulum`` +is created, and the default configuration will be automatically created here. +You can move it to one of the other locations if you wish. + +It is also possible to use completely arbitrary configuration directories by +specifying the relevant command-line parameters when running Reticulum-based +programs. You can also run multiple separate Reticulum instances on the same +physical system, either in isolation from each other, or connected together. In most cases, a single physical system will only need to run one Reticulum instance. This can either be launched at boot, as a system service, or simply @@ -34,8 +47,8 @@ be brought up when a program needs it. In either case, any number of programs running on the same system will automatically share the same Reticulum instance, if the configuration allows for it, which it does by default. -The entire configuration of Reticulum is found in the ``~/.config/reticulum/config`` -file. When Reticulum is first started on a new system, a basic, functional +The entire configuration of Reticulum is found in the ``~/.reticulum/config`` +file. When Reticulum is first started on a new system, a basic, but fully functional configuration file is created. The default configuration looks like this: .. code:: @@ -371,7 +384,7 @@ output. rnx 7a55144adf826958a9529a3bcf08b149 -x # The default identity file is stored in - # ~/.config/reticulum/identities/rnx, but you can use + # ~/.reticulum/identities/rnx, but you can use # another one, which will be created if it does # not already exist rnx 7a55144adf826958a9529a3bcf08b149 -i /path/to/identity -x diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html index a026b01..508aabb 100644 --- a/docs/manual/gettingstartedfast.html +++ b/docs/manual/gettingstartedfast.html @@ -287,7 +287,7 @@ network status and connectivity.

Creating a Network With Reticulum#

To create a network, you will need to specify one or more interfaces for Reticulum to use. This is done in the Reticulum configuration file, which by -default is located at ~/.config/reticulum/config. You can edit this file by hand, +default is located at ~/.reticulum/config. You can edit this file by hand, or use the interactive rnsconfig utility.

When Reticulum is started for the first time, it will create a default configuration file, with one active interface. This default interface uses @@ -432,7 +432,7 @@ don’t use pip, but try this recipe:

# Unless you've manually created a config file, Reticulum will do so now, # and immediately exit. Make any necessary changes to the file: -nano ~/.config/reticulum/config +nano ~/.reticulum/config # ... and launch the example again. python3 Examples/Echo.py -s diff --git a/docs/manual/networks.html b/docs/manual/networks.html index a9f45c0..71366e0 100644 --- a/docs/manual/networks.html +++ b/docs/manual/networks.html @@ -319,7 +319,7 @@ communications channels as the underlying carrier for Reticulum.

However, most real-world networks will probably involve either some form of wireless or direct hardline communications. To allow Reticulum to communicate over any type of medium, you must specify it in the configuration file, by default -located at ~/.config/reticulum/config. See the Supported Interfaces +located at ~/.reticulum/config. See the Supported Interfaces chapter of this manual for interface configuration examples.

Any number of interfaces can be configured, and Reticulum will automatically decide which are suitable to use in any given situation, depending on where diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 25a6ddb..298f390 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["examples", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 1, 4, 5, 6, 8, 9, 10], "number": [0, 1, 4, 5, 6, 8, 9], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "includ": [0, 2, 3, 4, 6, 8], "sourc": [0, 1, 2, 5, 8, 10], "distribut": [0, 1, 5, 6, 8, 9], "reticulum": [0, 4, 5, 6], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "us": [0, 2, 3, 4, 5, 6, 8], "learn": [0, 1, 7, 8], "how": [0, 1, 2, 4, 5, 8, 10], "write": [0, 1, 4, 6, 8], "your": [0, 1, 2, 3, 4, 5, 7, 8, 10], "own": [0, 1, 5, 6, 8, 9], "program": [0, 3, 4, 6, 8, 10], "The": [0, 1, 2, 3, 4, 5, 6, 10], "demonstr": [0, 4], "bare": 0, "minimum": [0, 4, 5, 8], "setup": [0, 1, 3, 4], "requir": [0, 1, 4, 5, 8, 9, 10], "connect": [0, 2, 3, 4, 5, 6, 8, 9, 10], "network": [0, 2, 4, 6, 8, 9, 10], "from": [0, 1, 2, 4, 5, 6, 8, 9, 10], "In": [0, 1, 2, 4, 5, 6, 8, 9, 10], "about": [0, 1, 2, 4, 5, 6, 8], "five": 0, "line": [0, 1, 2, 4, 5, 8, 10], "have": [0, 1, 2, 4, 5, 6, 8, 9], "stack": [0, 1, 5, 6, 8, 9, 10], "initialis": [0, 6, 9], "readi": [0, 1, 2, 4, 5, 6, 10], "pass": [0, 2, 4, 5, 6, 8, 9], "traffic": [0, 1, 4, 5, 6, 8, 9], "thi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "rn": [0, 1, 6, 8, 9], "start": [0, 2, 3, 4, 6, 8, 9], "up": [0, 1, 2, 4, 5, 8, 9, 10], "gener": [0, 1, 2, 4, 5, 6, 8, 9, 10], "new": [0, 4, 5, 6, 8, 9], "destin": [0, 1, 3, 4, 5, 6, 9], "let": [0, 1, 4, 5, 8, 9], "user": [0, 1, 4, 5, 8, 9], "send": [0, 4, 6, 8, 9], "an": [0, 1, 2, 4, 5, 6, 8, 9, 10], "import": [0, 1, 2, 4, 5, 7, 8], "argpars": 0, "": [0, 1, 4, 5, 8, 9, 10], "defin": [0, 4, 8, 9], "app": [0, 1, 6, 8], "name": [0, 3, 4, 5, 6], "we": [0, 1, 2, 4, 7, 8], "ll": [0, 1, 10], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "creat": [0, 3, 4, 5, 6, 8, 9, 10], "sinc": [0, 1, 4, 5, 6, 8], "basic": [0, 1, 3, 6, 9], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "part": [0, 4, 5, 6, 8], "rang": [0, 1, 2, 4, 5, 8, 9, 10], "util": [0, 2, 3, 4, 8], "put": [0, 2, 4], "them": [0, 1, 2, 4, 5, 7, 8, 9], "within": [0, 1, 4, 5, 6, 8], "namespac": 0, "example_util": [0, 9], "app_nam": [0, 6], "execut": [0, 1, 4, 6, 9], "when": [0, 1, 2, 4, 5, 6, 8, 9], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 1, 4, 5, 6, 8], "first": [0, 1, 4, 6, 8, 9], "randomli": [0, 8], "ident": [0, 1, 3, 6, 9, 10], "our": [0, 8], "just": [0, 1, 2, 4, 5, 8, 10], "endpoint": [0, 5, 6, 8], "address": [0, 1, 4, 5, 6, 8, 10], "commun": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], "also": [0, 1, 2, 4, 5, 6, 8, 9, 10], "exist": [0, 1, 2, 4, 8, 9, 10], "which": [0, 1, 4, 5, 6, 8, 9], "know": [0, 1, 2, 5, 6, 8], "thei": [0, 1, 4, 5, 6, 8, 9], "reachabl": [0, 1, 4, 5, 6, 8, 9], "autoomat": 0, "path": [0, 1, 2, 4, 6, 8, 9], "anywher": [0, 4], "els": [0, 5, 8], "IN": [0, 6], "singl": [0, 4, 6, 8, 9, 10], "minimalsampl": 0, "configur": [0, 1, 2, 3, 4, 5, 6, 8, 10], "automat": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prove": [0, 8], "packet": [0, 1, 2, 3, 4, 5, 6, 9, 10], "adress": [0, 6, 8], "By": [0, 1, 4, 6, 8, 9], "do": [0, 1, 2, 4, 6, 8, 10], "proof": [0, 6, 8, 9], "each": [0, 1, 4, 5, 8, 9], "incom": [0, 4, 6, 9], "transmit": [0, 4, 8], "back": [0, 4, 8, 10], "sender": [0, 1, 5, 8, 9], "anyon": [0, 1, 2, 5, 6, 8, 9], "tri": 0, "whether": [0, 4, 6, 8], "wa": [0, 2, 4, 5, 6, 8, 10], "receiv": [0, 1, 4, 6, 8, 9], "correctli": 0, "set_proof_strategi": [0, 6], "prove_al": [0, 6], "everyth": [0, 5, 8], "hand": [0, 1], "over": [0, 2, 3, 4, 6, 8, 9, 10], "control": [0, 1, 2, 3, 5, 6, 8], "loop": 0, "announceloop": 0, "log": [0, 4, 9], "prettyhexrep": 0, "hash": [0, 1, 6, 8, 9], "run": [0, 1, 2, 4, 5, 6, 8, 9, 10], "hit": 0, "enter": [0, 9], "manual": [0, 1, 4, 5, 6, 9], "ctrl": 0, "c": [0, 5], "quit": 0, "until": [0, 4, 6], "exit": [0, 1, 6, 9], "If": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server": [0, 1, 2, 3, 9], "client": [0, 1, 2, 3, 6], "messag": [0, 1, 6, 8, 9], "direct": [0, 1, 2, 5, 6, 8, 9], "toward": [0, 4, 8], "while": [0, 1, 2, 4, 5, 6, 8, 10], "true": [0, 4, 6, 9], "input": [0, 9], "sent": [0, 1, 6, 8, 9], "startup": 0, "get": [0, 2, 3, 4, 6, 10], "pars": 0, "desir": [0, 2, 4, 8], "mode": [0, 1, 2, 3, 8, 9, 10], "__name__": 0, "__main__": 0, "try": [0, 3, 4], "parser": 0, "argumentpars": 0, "descript": [0, 9], "add_argu": 0, "config": [0, 1, 2, 5, 9], "action": 0, "store": [0, 2, 8, 9], "default": [0, 1, 2, 4, 5, 6, 8, 9], "none": [0, 4, 6, 8, 9], "help": [0, 2, 5, 7, 8, 9, 10], "altern": [0, 4, 9], "directori": [0, 9], "type": [0, 1, 3, 4, 5, 6, 9], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 4], "keyboardinterrupt": 0, "print": [0, 4, 9], "found": [0, 1, 4, 5, 8, 9], "http": [0, 1, 7], "github": [0, 1, 7], "com": [0, 1, 7], "markqvist": [0, 1, 7], "blob": [0, 8], "master": [0, 6], "py": [0, 1, 8], "build": [0, 1, 2, 3, 4, 8, 10], "upon": [0, 8], "previou": 0, "explor": [0, 8, 10], "notif": [0, 6], "relev": [0, 2, 4, 6, 8, 9], "set": [0, 1, 2, 4, 5, 6, 8, 9, 10], "callback": [0, 6], "applic": [0, 4, 5, 6, 8, 9], "arriv": [0, 8], "random": [0, 6, 8], "two": [0, 1, 2, 4, 5, 8], "list": [0, 1, 2, 4, 6, 8, 10], "string": [0, 6], "app_data": [0, 6], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 1], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 1, 2, 5, 8, 10], "destination_1": 0, "destination_2": 0, "handler": [0, 6], "onli": [0, 1, 2, 4, 5, 6, 8, 9, 10], "ask": [0, 2, 6], "chang": [0, 1, 4, 6, 8, 9, 10], "filter": [0, 5, 8], "see": [0, 1, 4, 5, 6, 8, 9, 10], "what": [0, 1, 3, 6, 8], "happen": [0, 6, 8], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 6], "regist": [0, 6], "transport": [0, 1, 3, 4, 5, 6, 9, 10], "register_announce_handl": [0, 6], "select": [0, 4], "randint": 0, "0": [0, 4, 6, 8, 9, 10], "len": 0, "1": [0, 4, 6, 8, 9], "data": [0, 1, 3, 4, 5, 6, 8, 10], "encod": 0, "utf": 0, "8": [0, 4, 9], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "class": [0, 5, 6, 10], "method": [0, 1, 4, 6, 8], "take": [0, 1, 4, 8, 9, 10], "option": [0, 1, 2, 3, 5, 6, 8, 9], "argument": [0, 6, 9], "instanc": [0, 3, 4, 6, 8, 9], "some": [0, 1, 2, 4, 5, 8, 9], "want": [0, 1, 2, 4, 5, 8, 9, 10], "aspect": [0, 2, 4, 6, 8], "__init__": 0, "self": [0, 5, 10], "call": [0, 5, 6, 8, 10], "system": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10], "match": [0, 4, 8], "specif": [0, 2, 3, 4, 6, 10], "cannot": [0, 1], "wildcard": 0, "received_announc": [0, 6], "destination_hash": [0, 6, 9], "announced_ident": [0, 6], "contain": [0, 5, 6, 8, 9], "follow": [0, 1, 2, 4, 7, 8, 9, 10], "decod": 0, "plaintext": [0, 6], "unencrypt": [0, 6, 8], "inform": [0, 1, 3, 4, 5, 6, 8, 9], "ani": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "listen": [0, 4, 8, 9], "sy": 0, "channel": [0, 4, 5, 7, 8, 10], "did": 0, "one": [0, 1, 2, 4, 5, 6, 8, 9, 10], "public_inform": 0, "ad": [0, 2, 3, 4, 5, 6, 8, 10], "so": [0, 1, 2, 4, 5, 6, 7, 8, 10], "differ": [0, 1, 2, 4, 5, 6, 8, 9, 10], "plain": [0, 4, 6, 8], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 1, 2, 4, 5, 6, 9], "everi": [0, 4, 5, 6, 8], "time": [0, 1, 2, 4, 5, 6, 8, 9], "set_packet_callback": [0, 6], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 1, 2, 4, 5, 8, 9], "out": [0, 1, 2, 4, 5, 6, 8, 9, 10], "r": [0, 4, 8, 9], "n": [0, 8, 9], "end": [0, 4, 5, 6, 8, 10], "stdout": [0, 4, 9], "flush": 0, "text": [0, 1, 5, 8], "prompt": 0, "channelarg": 0, "between": [0, 4, 5, 6, 8], "interfac": [0, 2, 3, 5, 6, 9], "simpl": [0, 2, 6, 8, 9, 10], "respond": [0, 6], "receipt": [0, 6, 8], "choos": [0, 1, 4, 8], "global": [0, 1, 4, 5, 8, 10], "server_ident": 0, "queri": [0, 1, 6], "abl": [0, 1, 4, 5, 6, 8, 9], "verifi": [0, 6, 8], "repli": [0, 9], "encrypt": [0, 1, 5, 6, 8, 10], "wai": [0, 1, 4, 5, 8], "certain": [0, 4, 5, 7, 8], "than": [0, 1, 4, 5, 8], "read": [0, 1, 4, 6, 8, 9], "echo_destin": 0, "tell": [0, 4], "function": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10], "server_callback": 0, "wait": [0, 4, 8, 9], "go": [0, 1, 4, 8], "handl": [0, 2, 4, 5, 6, 8, 9, 10], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 4], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 6, 9], "binari": [0, 1, 8], "represent": 0, "command": [0, 1, 4, 9], "dest_len": 0, "truncated_hashlength": [0, 6], "2": [0, 4, 6, 8, 9], "rais": [0, 6], "valueerror": [0, 6], "length": [0, 4, 6, 8], "invalid": [0, 6], "hex": 0, "hexadecim": [0, 8, 9], "charact": 0, "byte": [0, 6, 8, 9, 10], "format": [0, 3, 10], "fromhex": 0, "e": [0, 5], "check": [0, 1, 6, 8], "overrid": 0, "loglevel": [0, 6, 9], "provid": [0, 1, 2, 3, 4, 5, 6, 8, 10], "feedback": [0, 3], "log_info": 0, "doe": [0, 1, 2, 3, 4, 5, 6, 8, 9], "load": [0, 1, 6, 9], "has_path": [0, 6], "To": [0, 1, 2, 4, 5, 8, 9, 10], "public": [0, 3, 4, 6], "kei": [0, 3, 5, 6, 10], "done": [0, 1, 4, 5, 8, 9], "recal": [0, 6], "modul": [0, 1, 2, 8, 9, 10], "known": [0, 6, 8, 9], "return": [0, 6, 9], "outgo": [0, 4, 6, 8, 9], "got": 0, "correct": [0, 8], "convent": 0, "request_destin": 0, "add": [0, 1, 4, 5, 9], "echo_request": 0, "get_random_hash": [0, 6], "successfulli": [0, 8], "packetreceipt": [0, 3, 6], "packet_receipt": [0, 6], "set_timeout": [0, 6], "set_timeout_callback": [0, 6], "packet_timed_out": 0, "deliveri": [0, 1, 6, 10], "set_delivery_callback": [0, 6], "packet_deliv": 0, "yet": [0, 4, 8], "request_path": [0, 6], "statu": [0, 1, 3, 4, 6, 8, 9], "deliv": [0, 6], "rtt": [0, 6, 8], "get_rtt": [0, 6], "round": [0, 6, 9], "3": [0, 4, 8, 9, 10], "rttstring": 0, "second": [0, 4, 6, 8, 9, 10], "1000": 0, "millisecond": [0, 9], "proof_packet": 0, "valid": [0, 4, 6, 8, 9], "trip": [0, 6, 9], "fail": [0, 6], "store_tru": 0, "t": [0, 1, 4, 5, 6, 9], "metavar": 0, "float": [0, 6], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 1, 4, 5, 6, 10], "remot": [0, 6, 9], "forth": 0, "o": [0, 8, 9, 10], "refer": [0, 1, 3], "latest": [0, 1, 4], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 6], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 6], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 1, 4, 6, 8], "last": [0, 4, 6], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 9], "begin": [0, 2, 6], "And": 0, "client_packet_receiv": 0, "close": [0, 5, 6, 9], "link_establish": 0, "link_clos": 0, "interact": [0, 1, 6, 8, 9], "client_loop": 0, "becom": [0, 1, 5, 8], "should_quit": 0, "fals": [0, 4, 6, 9], "should": [0, 1, 2, 4, 5, 6, 8, 9, 10], "q": [0, 9], "teardown": [0, 6], "mdu": 0, "size": [0, 1, 4, 6, 8, 9], "exce": [0, 4, 6], "log_error": 0, "error": [0, 1, 7, 9], "ha": [0, 1, 2, 4, 5, 6, 8, 10], "been": [0, 1, 2, 4, 5, 6, 8, 10], "later": [0, 1, 4], "teardown_reason": 0, "now": [0, 1, 5, 8, 9], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 4, 6, 9], "_exit": 0, "identifi": [0, 4, 6, 8, 9], "intiat": 0, "onc": [0, 1, 2, 4, 5, 6, 8, 9, 10], "initi": [0, 5, 6, 8, 10], "peer": [0, 1, 4, 6, 8, 9], "identifyexampl": 0, "set_remote_identified_callback": [0, 6], "remote_identifi": 0, "origin": [0, 5, 8], "displai": [0, 8], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 6], "client_ident": 0, "sendig": 0, "perform": [0, 1, 4, 5, 8], "random_text_gener": 0, "request_id": [0, 6], "remote_ident": [0, 6], "requested_at": [0, 6], "look": [0, 1, 4, 8, 9], "On": [0, 1, 4, 9], "full": [0, 4, 6, 8, 9, 10], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 8, 9], "awai": [0, 4, 5, 8, 9], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 6], "response_gener": [0, 6], "allow": [0, 1, 2, 4, 5, 6, 8, 9, 10], "allow_al": [0, 6], "response_callback": [0, 6], "got_respons": 0, "failed_callback": [0, 6], "request_fail": 0, "request_receipt": [0, 6], "request_receiv": 0, "implement": [0, 4, 5, 6, 7, 8, 10], "file": [0, 1, 2, 4, 5, 6, 8, 9, 10], "download": [0, 4, 9], "resourc": [0, 1, 3, 6, 7], "effici": [0, 1, 4, 8, 10], "serv": [0, 2, 4, 5, 8, 9], "pleas": [0, 1, 4, 6, 9, 10], "note": [0, 1, 2, 4, 6, 8, 9], "larg": [0, 2, 4, 5, 6, 8, 10], "transfer": [0, 6, 8, 9, 10], "recommend": [0, 1, 2, 8], "compress": [0, 6, 8], "hashmap": 0, "sequenc": [0, 6, 8, 10], "long": [0, 1, 2, 4, 8], "slow": [0, 4, 8], "cpu": [0, 8], "probabl": [0, 5, 8, 9, 10], "result": [0, 8, 9], "befor": [0, 1, 4, 6, 8, 9], "complet": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prepar": [0, 5], "bundl": 0, "instead": [0, 1, 4, 8, 9], "slice": 0, "chunk": 0, "suitabl": [0, 1, 4, 5, 8, 10], "pack": 0, "thread": 0, "vendor": [0, 2], "umsgpack": 0, "app_timeout": 0, "45": [0, 8], "serve_path": 0, "here": [0, 1, 2, 4, 8, 9], "conveni": 0, "list_fil": 0, "entri": [0, 1, 8], "actual": [0, 1, 4, 8], "listdir": 0, "isfil": 0, "join": [0, 1, 5, 7, 8], "host": [0, 1, 4, 8, 9], "still": [0, 1, 2, 5, 8], "isdir": 0, "packb": 0, "fit": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 5], "mani": [0, 1, 2, 4, 5, 6, 8, 9, 10], "split": 0, "filelist": 0, "multipl": [0, 4, 5, 8, 9], "hint": 0, "alreadi": [0, 1, 2, 5, 6, 8, 9], "support": [0, 1, 3, 5, 8, 10], "after": [0, 4, 5, 6, 8, 9], "re": [0, 4, 6, 8], "keep": [0, 5, 6, 8, 9, 10], "open": [0, 2, 4, 5, 6, 7, 8, 9, 10], "client_request": 0, "longer": [0, 5, 8, 9], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 4], "don": [0, 1, 2, 5, 6, 9], "unknown": [0, 4, 6, 8], "conclud": [0, 6], "hasattr": 0, "avail": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server_fil": 0, "current": [0, 1, 2, 3, 4, 6, 8], "current_download": 0, "current_filenam": 0, "variabl": 0, "statist": [0, 4, 7], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 4, 6, 8, 9], "normal": [0, 4, 6], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 6], "set_resource_strategi": [0, 6], "accept_al": [0, 6], "set_resource_started_callback": [0, 6], "download_began": 0, "set_resource_concluded_callback": [0, 6], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 2, 4, 6], "request_packet": 0, "create_receipt": [0, 6], "print_menu": 0, "25": [0, 3, 10], "user_input": 0, "int": 0, "screen": 0, "variou": [0, 1, 4, 5, 8], "state": 0, "It": [0, 1, 2, 4, 6, 8, 9, 10], "uninterest": 0, "won": 0, "detail": [0, 1, 3, 4, 6, 9, 10], "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 6], "100": [0, 4, 8], "rprogress": 0, "save_error": 0, "could": [0, 1, 4, 5, 6, 8, 10], "disk": [0, 6], "hour": [0, 4], "rem": 0, "divmod": 0, "3600": [0, 4], "minut": [0, 1, 4, 8], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 8], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 3, 9], "suffix": 0, "b": [0, 5, 9], "ttransfer": 0, "press": 0, "index": [0, 1, 3], "enumer": 0, "filelist_data": 0, "unpack": 0, "extend": [0, 1, 6], "local": [0, 1, 4, 5, 6, 8, 9, 10], "unpackb": 0, "append": [0, 8], "visibl": 0, "updat": [0, 1, 6, 8], "small": [0, 4, 5, 8, 10], "job": 0, "potenti": [0, 4, 7, 8, 9], "target": [0, 4, 9], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 6, 10], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 6, 7, 8], "readabl": [0, 6, 8], "num": 0, "unit": [0, 1, 9], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 8], "pi": [0, 5, 8, 9, 10], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 1, 8, 9], "g": 0, "p": [0, 9], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 6, 8], "cl": 0, "nt": 0, "dir": 0, "best": [1, 8, 10], "depend": [1, 2, 5, 6, 8, 9], "guid": [1, 2, 8], "outlin": [1, 2, 8], "sensibl": [1, 2], "scenario": [1, 3, 8], "built": [1, 4, 8, 10], "few": [1, 2, 4, 5, 8, 9, 10], "other": [1, 2, 4, 5, 6, 8, 9], "even": [1, 2, 4, 5, 8, 9, 10], "extrem": [1, 8, 9, 10], "low": [1, 2, 4, 5, 8, 10], "bandwidth": [1, 4, 5, 6, 8, 10], "These": [1, 4, 8, 9], "feel": 1, "work": [1, 2, 4, 5, 8, 9, 10], "design": [1, 2, 5, 8, 10], "well": [1, 2, 4, 5, 6, 8, 10], "lora": [1, 2, 3, 8, 10], "wifi": [1, 3, 4, 5, 8, 9, 10], "wire": [1, 2, 3, 4, 10], "ethernet": [1, 2, 4, 5, 8, 10], "combin": [1, 3, 5, 8], "As": [1, 2, 4, 5, 6, 8, 10], "easi": [1, 2, 4, 8, 9, 10], "experi": [1, 8], "without": [1, 2, 5, 8, 10], "transceiv": [1, 2, 4, 8, 10], "infrastructur": [1, 2, 4, 5, 8, 9], "launch": [1, 9], "separ": [1, 4, 5, 8, 9], "devic": [1, 2, 3, 4, 5, 6, 8, 9], "same": [1, 2, 4, 5, 6, 8, 9], "enough": [1, 2, 8], "physic": [1, 2, 4, 8, 9], "termin": [1, 6], "suit": [1, 2, 8, 9], "featur": [1, 7, 8, 10], "both": [1, 2, 4, 5, 6, 8, 9, 10], "delai": [1, 4, 8, 9], "offlin": 1, "share": [1, 5, 6, 8, 9], "browser": 1, "page": [1, 3, 8], "dynam": [1, 9], "render": 1, "authent": [1, 4, 5, 6, 8, 9, 10], "more": [1, 2, 4, 5, 6, 8, 9, 10], "face": [1, 4], "protocol": [1, 2, 3, 4, 10], "lxmf": 1, "anoth": [1, 6, 8, 9], "project": 1, "instal": [1, 3, 4, 5, 8, 9, 10], "via": [1, 2, 4, 7, 8, 9, 10], "pip": [1, 2, 9], "pip3": [1, 2, 9], "nomadnet": 1, "veri": [1, 2, 4, 5, 6, 7, 8, 9, 10], "might": [1, 4, 5, 8, 9], "reboot": 1, "similar": [1, 2, 4, 5, 9, 10], "again": [1, 4, 8, 9], "would": [1, 4, 5, 6, 8], "rather": 1, "graphic": 1, "linux": [1, 8], "maco": 1, "earli": [1, 2], "stage": [1, 8], "interoper": [1, 2, 5, 8, 10], "come": [1, 8], "make": [1, 2, 4, 7, 8, 9], "easier": [1, 4, 5, 9], "manag": [1, 5, 6, 8, 9], "rnsd": [1, 3], "background": [1, 4], "foreground": 1, "servic": [1, 3, 5], "rnstatu": [1, 3, 4, 8], "rnpath": [1, 3, 4], "rnprobe": [1, 3], "view": [1, 4, 8, 9], "chapter": [1, 2, 4, 5, 6, 8, 9, 10], "locat": [1, 2, 5, 8, 9], "edit": [1, 9], "rnsconfig": 1, "broadcast": [1, 3, 4, 6, 8], "domain": [1, 4], "further": [1, 3, 4], "exampl": [1, 2, 3, 4, 6, 8, 9, 10], "tcp": [1, 2, 3, 5, 8, 10], "There": [1, 5, 8, 10], "subnet": [1, 5], "rout": [1, 4, 5, 6, 8, 9, 10], "tabl": [1, 4, 5, 8, 9], "thing": 1, "discov": [1, 4], "topographi": [1, 5, 8], "situat": [1, 2, 4, 5, 8], "where": [1, 2, 3, 4, 5, 6, 8, 9], "utilis": [1, 5, 6, 9, 10], "extern": [1, 4, 6, 10], "often": [1, 4, 5, 8, 9], "suffici": [1, 4, 8, 9], "act": [1, 6, 8, 9], "gatewai": [1, 4, 5, 8], "enabl": [1, 2, 4, 5, 6, 8, 9], "wider": [1, 4, 8, 9], "autointerfac": [1, 2, 4, 9], "possibli": 1, "offer": [1, 3, 4, 6, 8], "i2p": [1, 3, 10], "carefulli": 1, "tcpserverinterfac": [1, 4], "access": [1, 3, 4, 5, 6, 9], "ip": [1, 2, 4, 8, 9, 10], "faster": [1, 4, 8], "lower": [1, 4, 9], "latenc": [1, 8, 10], "energi": 1, "i2pinterfac": [1, 4], "howev": [1, 5, 8], "leak": 1, "reveal": [1, 6, 8, 10], "who": [1, 8], "inspect": [1, 4, 5, 8], "someon": [1, 4], "determin": [1, 6, 8], "adversari": 1, "mai": [1, 4, 6, 8, 9], "record": [1, 8], "metadata": 1, "like": [1, 2, 4, 5, 6, 8, 9, 10], "transmiss": [1, 4, 6, 8], "though": [1, 2, 4, 8], "publicli": 1, "most": [1, 2, 4, 5, 8, 9], "anymor": 1, "through": [1, 2, 4, 5, 6, 8, 9, 10], "invis": [1, 4], "daemon": [1, 4, 6, 9], "parallel": 1, "For": [1, 2, 4, 5, 6, 8, 10], "alwai": [1, 4, 6, 8, 9], "node": [1, 3, 4, 5, 9, 10], "i2pd": [1, 4], "mix": [1, 4, 5, 9], "hide": 1, "relai": 1, "extra": [1, 4, 5, 9], "comput": [1, 8, 10], "power": [1, 2, 4, 8], "attack": 1, "form": [1, 4, 5, 6, 8], "deep": 1, "much": [1, 4, 5, 8, 9], "difficult": [1, 2], "non": [1, 6, 8], "behind": [1, 8], "firewal": [1, 4], "nat": 1, "preserv": [1, 6], "anonym": [1, 5, 6, 8, 10], "care": [1, 2, 6, 10], "slightli": 1, "experiment": [1, 2, 10], "made": [1, 6, 8], "dublin": 1, "hub": [1, 4], "tcpclientinterfac": [1, 2, 4], "ye": [1, 4, 8, 9], "target_host": [1, 4], "target_port": [1, 4], "4965": [1, 9], "frankfurt": [1, 9], "5377": 1, "uxg5kubabakh3jtnvsipingbr5574dle7bubvip7llfvwx2tgrua": 1, "b32": [1, 4], "point": [1, 2, 4, 5, 8, 9], "absolut": [1, 2, 7, 10], "usag": [1, 3, 4, 6, 7, 9], "occasion": 1, "test": [1, 2, 8], "failur": [1, 4], "guarante": [1, 8], "compat": [1, 2, 4, 6, 8], "hardwar": [1, 3, 4, 5, 6, 8, 9, 10], "wide": [1, 2, 4, 8, 10], "section": [1, 2, 4, 5, 8, 9], "easili": [1, 4, 5, 8, 9, 10], "cheapli": 1, "rnode": [1, 3, 8, 9, 10], "purpos": [1, 2, 4, 6, 8], "digit": [1, 2, 8, 10], "integr": [1, 5, 8], "yourself": [1, 8, 10], "custom": [1, 4, 6, 8, 10], "firmwar": [1, 2, 8], "board": [1, 3, 8, 10], "auto": [1, 2, 3, 6, 8], "script": [1, 2], "prefer": [1, 8], "purchas": [1, 5, 8, 10], "supplier": [1, 3], "addit": [1, 2, 4, 8, 9, 10], "privat": [1, 4, 6, 7, 8, 10], "secur": [1, 8, 10], "uncensor": 1, "mesh": [1, 4, 5, 10], "think": 1, "welcom": 1, "head": 1, "discuss": [1, 2, 8], "propos": 1, "easiest": [1, 2, 4, 8], "releas": [1, 2, 4, 8], "abov": [1, 2, 4, 8, 9], "next": [1, 5, 6, 8], "step": [1, 2], "pyseri": 1, "netifac": 1, "api": [1, 3, 8, 10], "associ": [1, 6, 8], "case": [1, 2, 4, 5, 8, 9], "recip": 1, "cryptographi": [1, 8, 10], "clone": 1, "repositori": [1, 7, 8], "git": 1, "move": [1, 4, 8], "folder": 1, "symlink": [1, 9], "librari": 1, "cd": 1, "ln": [1, 9], "python3": [1, 2], "echo": [1, 3, 9], "unless": [1, 4, 6, 8], "ve": 1, "immedi": [1, 4, 9], "necessari": [1, 2, 4, 5, 6, 8], "nano": 1, "repeat": 1, "process": [1, 2, 4, 6, 8], "h": [1, 9], "ping": [1, 9], "replac": [1, 8, 9], "below": [1, 2, 4, 9], "3e12fc71692f8ec47bc5": 1, "filetransf": [1, 3, 6], "understand": [1, 3, 6, 9], "architectur": 1, "precompil": 1, "dev": [1, 4, 9], "packag": [1, 4, 8], "sudo": [1, 9], "apt": 1, "relat": 1, "termux": 1, "f": 1, "droid": 1, "emul": 1, "environ": [1, 5, 8], "abil": [1, 2], "io": [1, 2, 9], "pre": [1, 2, 6, 8], "wheel": 1, "standard": [1, 2, 8], "sure": [1, 2, 9], "pkg": 1, "upgrad": [1, 8], "Then": 1, "essenti": [1, 4, 8], "openssl": [1, 8], "libffi": 1, "rust": 1, "platform": [1, 2, 8], "compil": 1, "export": 1, "cargo_build_target": 1, "aarch64": 1, "sever": [1, 5, 6, 9], "succe": 1, "softwar": [1, 2, 4, 8, 10], "possibl": [1, 2, 4, 5, 6, 8, 10], "apk": 1, "tutori": 1, "code": [1, 2, 3, 4, 9], "rare": [1, 4], "obscur": 1, "unusu": 1, "rnspure": 1, "content": [1, 5, 9], "No": [1, 4, 8, 9, 10], "matter": [1, 4], "perfectli": 1, "serial": [1, 2, 3, 8, 10], "pyca": [1, 8], "cryptograph": [1, 3, 5, 10], "primit": [1, 3], "One": [2, 6], "truli": [2, 8], "valuabl": [2, 7], "almost": [2, 4, 8, 9], "conceiv": 2, "kind": [2, 4, 5, 8], "medium": [2, 4, 5, 6, 8, 10], "flexibl": [2, 4, 10], "cover": [2, 8, 10], "wireless": [2, 5], "decad": 2, "old": [2, 7, 8], "radio": [2, 3, 4, 5, 6, 8, 9, 10], "modem": [2, 4, 5, 6, 8, 10], "modern": [2, 8], "millimet": 2, "wave": 2, "backhaul": [2, 5], "oper": [2, 4, 5, 6, 8, 9, 10], "good": [2, 5, 8, 9], "chanc": 2, "box": 2, "glue": 2, "littl": [2, 8], "effort": 2, "pipeinterfac": [2, 4], "kiss": [2, 3, 9, 10], "simplyequip": 2, "broad": 2, "abund": 2, "sometim": 2, "especi": [2, 4], "scratch": 2, "real": [2, 5, 10], "world": [2, 5, 10], "minim": [2, 3, 8], "cost": [2, 8, 10], "fundament": [2, 8], "categori": 2, "emploi": [2, 8], "reliabl": [2, 4, 5, 8, 10], "commonli": 2, "either": [2, 4, 5, 8, 9], "expens": 2, "hard": 2, "hungri": 2, "attempt": [2, 6], "allevi": 2, "particular": 2, "plaform": 2, "its": [2, 4, 6, 8], "compon": [2, 7, 8], "frequenc": [2, 4, 8], "band": [2, 8], "scheme": 2, "limit": [2, 5, 8], "common": [2, 3, 5, 8, 9, 10], "ism": [2, 8], "avoid": [2, 8, 9], "confus": [2, 8], "layer": [2, 4, 5, 8, 10], "noth": [2, 10], "lorawan": [2, 8], "central": [2, 5, 8], "iot": 2, "raw": 2, "overhead": [2, 4, 8], "high": [2, 4, 8, 10], "level": [2, 4, 8, 9], "directli": [2, 4, 6, 8, 9, 10], "replic": [2, 8], "across": [2, 5], "togeth": [2, 8, 9], "tool": [2, 8, 9, 10], "exact": [2, 4, 8], "explain": [2, 6], "approach": [2, 8, 9], "develop": [2, 3, 6, 7, 8, 10], "boil": 2, "obtain": [2, 8], "autom": [2, 7, 8], "provis": 2, "rnodeinterfac": [2, 4, 9], "ic": 2, "semtech": 2, "sx1276": 2, "esp32": 2, "manufactur": 2, "avr": 2, "atmega1284p": 2, "rnodeconf": 2, "autoinstal": 2, "seri": 2, "question": [2, 4], "consid": [2, 6, 8, 10], "newest": [2, 8], "version": [2, 8, 9], "stabil": 2, "paramet": [2, 4, 5, 6, 8], "port": [2, 3, 4, 5, 8, 10], "air": [2, 10], "id": [2, 4, 6, 8, 9], "itself": [2, 3, 8], "touch": [2, 10], "produc": 2, "short": [2, 8, 9], "fulli": [2, 8, 10], "bridg": [2, 3], "behav": 2, "mean": [2, 4, 5, 8, 9], "link": [2, 3, 4, 5, 6, 9, 10], "dhcp": [2, 4, 9], "dn": 2, "least": [2, 4, 8, 9, 10], "transpar": [2, 4, 8, 9], "capac": [2, 4, 6, 8], "distanc": [2, 8], "ubiqu": 2, "airmax": 2, "ltu": 2, "mikrotik": 2, "exhaust": [2, 8], "rel": [2, 8, 10], "cheap": [2, 8], "co": [2, 4, 10], "concurr": [2, 8, 9], "pattern": [2, 8], "gain": [2, 6, 8], "antenna": 2, "backbon": 2, "area": [2, 4, 5, 8, 10], "aim": [3, 8], "particip": [3, 5, 8], "caveat": 3, "emptor": 3, "fast": [3, 4, 6, 8], "base": [3, 4, 5, 6, 8, 9, 10], "nomad": 3, "sideband": 3, "With": [3, 4, 5, 8, 9], "internet": [3, 4, 8, 10], "testnet": [3, 9], "arm64": 3, "android": 3, "pure": [3, 8], "python": [3, 8, 9, 10], "rncp": 3, "rnx": 3, "improv": [3, 4, 7], "fix": [3, 8], "motiv": 3, "goal": [3, 4], "introduct": 3, "announc": [3, 6, 9], "mechan": [3, 4], "reach": [3, 4, 5], "prioritis": [3, 4, 5, 6], "propag": [3, 4, 6], "rule": [3, 4], "udp": [3, 5, 8, 9, 10], "pipe": [3, 10], "ax": [3, 10], "concept": [3, 8, 9], "overview": [3, 4, 8], "interconnect": [3, 4, 8], "site": [3, 4], "growth": 3, "converg": [3, 8], "identif": [3, 4, 10], "request": [3, 4, 6, 8, 9], "respons": [3, 6, 8], "donat": 3, "contribut": 3, "requestreceipt": [3, 6], "search": 3, "distinct": [4, 8], "topologi": [4, 8], "less": [4, 8, 10], "endless": 4, "describ": [4, 6, 8], "give": [4, 8, 9], "respect": 4, "discover": 4, "autoconfigur": [4, 10], "ipv6": [4, 9], "router": [4, 9], "sort": [4, 8], "switch": [4, 8], "os": 4, "interface_en": [4, 9], "isol": [4, 9], "lan": 4, "group": [4, 6, 8], "group_id": 4, "kernel": [4, 9, 10], "wlan0": 4, "eth1": 4, "Or": [4, 9, 10], "ignor": [4, 6, 8], "ones": [4, 9], "ignored_devic": 4, "tun0": 4, "eth0": 4, "multicast": 4, "autodiscov": 4, "discoveri": [4, 8, 9], "scope": 4, "admin": 4, "organis": [4, 5, 7], "custom_network_nam": 4, "discovery_scop": 4, "discovery_port": 4, "48555": 4, "data_port": 4, "49555": 4, "frequent": 4, "block": 4, "inbound": [4, 6], "portabl": [4, 8], "persist": [4, 9], "achiev": [4, 6, 8], "geti2p": 4, "net": 4, "websit": 4, "base32": 4, "comma": 4, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 4, "output": [4, 9], "event": 4, "simplest": [4, 8], "tunnel": [4, 8, 10], "interchang": 4, "degre": 4, "retain": 4, "eas": [4, 8], "simpler": 4, "4242": 4, "listen_ip": 4, "listen_port": 4, "bind": 4, "10": [4, 8, 9], "88": 4, "i2p_tunnel": 4, "127": 4, "5001": 4, "dedic": [4, 8], "natur": 4, "toler": 4, "intermitt": 4, "gracefulli": 4, "restor": 4, "reappear": 4, "hostnam": 4, "expos": [4, 6], "soundmodem": 4, "kiss_fram": 4, "tnc": [4, 6, 9, 10], "8001": 4, "caution": 4, "frame": 4, "conjunct": 4, "never": [4, 6, 8], "disabl": [4, 8, 9], "intern": [4, 6, 8], "recoveri": 4, "greatli": 4, "unreli": 4, "implic": 4, "better": 4, "udpinterfac": 4, "forward_ip": 4, "255": 4, "forward_port": 4, "assum": [4, 8], "55": 4, "72": 4, "24": 4, "equival": 4, "forward": [4, 6, 8, 10], "segment": [4, 5, 6, 8, 10], "cours": [4, 8], "15": 4, "16": [4, 8, 9], "ttyusb0": [4, 9], "867": 4, "mhz": [4, 8], "867200000": 4, "125": 4, "khz": 4, "125000": 4, "tx": 4, "7": [4, 9], "mw": 4, "txpower": 4, "spread": 4, "factor": [4, 6], "12": 4, "being": [4, 6, 8], "fastest": [4, 8], "longest": 4, "spreadingfactor": 4, "throough": 4, "codingr": 4, "interv": [4, 6], "id_callsign": 4, "mycal": 4, "id_interv": 4, "600": 4, "homebrew": 4, "amount": [4, 5, 6, 8, 10], "ram": 4, "flow": [4, 5], "flow_control": 4, "pair": [4, 8], "laser": 4, "serialinterfac": 4, "baud": 4, "speed": [4, 8, 9], "115200": [4, 9], "databit": [4, 9], "pariti": [4, 9], "stopbit": [4, 9], "stdin": [4, 9], "virtual": [4, 5, 8, 9, 10], "netcat": 4, "l": [4, 9], "5757": 4, "respawn": 4, "respawn_delai": 4, "continu": [4, 7, 10], "scan": 4, "eof": 4, "respawn_interv": 4, "varieti": [4, 8, 9, 10], "openmodem": [4, 10], "period": [4, 6, 8], "beacon": 4, "station": 4, "kissinterfac": [4, 9], "ttyusb1": 4, "preambl": [4, 9], "150": [4, 9], "tail": 4, "txtail": [4, 9], "cdma": 4, "reason": [4, 8], "200": [4, 9], "slottim": [4, 9], "20": [4, 8, 9], "elaps": 4, "comment": [4, 9], "buffer": 4, "amateur": [4, 10], "spectrum": [4, 8], "encapsul": [4, 10], "callsign": 4, "ssid": 4, "realli": [4, 6], "doesn": 4, "anyth": [4, 8, 9, 10], "incur": 4, "ax25kissinterfac": 4, "no1cll": 4, "ttyusb2": 4, "150m": 4, "increas": [4, 9], "squelch": 4, "rx": 4, "turnaround": 4, "kept": [4, 5, 6, 8], "wast": 4, "airtim": 4, "behaviour": [4, 9], "bring": 4, "brought": [4, 9], "valu": [4, 6, 8], "access_point": 4, "shorthand": [4, 9], "ap": 4, "shorter": 4, "expiri": 4, "mostli": [4, 5, 8], "quiet": [4, 9], "momentarili": 4, "disappear": [4, 9], "network_nam": 4, "passphras": [4, 8], "alon": 4, "ifac_s": 4, "customis": 4, "carri": [4, 6, 8, 9], "512": [4, 6, 8], "bit": [4, 6, 8, 9, 10], "announce_cap": [4, 6], "maximum": [4, 6, 8], "alloc": [4, 6, 8, 9], "given": [4, 5, 6, 8, 9], "upkeep": 4, "cap": 4, "queue": [4, 8], "nearbi": 4, "ensur": [4, 6, 8], "overwhelm": [4, 6], "rapidli": 4, "spam": 4, "opposit": 4, "effect": 4, "excess": 4, "benefici": [4, 9], "balanc": 4, "necesarri": 4, "bitrat": 4, "report": [4, 7], "guess": 4, "per": [4, 6, 8, 10], "affect": 4, "strictli": [4, 8], "complex": [4, 8], "left": [4, 6, 8, 9], "gw": 4, "addition": [4, 8], "behalf": 4, "resid": 4, "requestor": 4, "resolv": 4, "chain": 4, "along": [4, 5, 6, 8], "boundari": 4, "remain": [4, 6, 8], "roam": 4, "mobil": [4, 8], "seen": [4, 8], "perspect": [4, 6, 8], "vehicl": 4, "equip": [4, 5, 8], "side": [4, 10], "expir": 4, "significantli": 4, "impact": [4, 8], "announce_rate_target": 4, "announce_rate_grac": 4, "announce_rate_penalti": 4, "basi": [4, 6, 8, 9, 10], "moder": 4, "violat": 4, "enforc": 4, "penalti": 4, "7200": 4, "annouce_cap": 4, "mention": [4, 8], "strategi": [4, 6], "decis": [4, 8], "slower": [4, 6, 8], "hop": [4, 5, 6, 8, 9, 10], "right": [4, 5], "tend": 4, "conserv": 4, "span": [4, 8], "seamlessli": 4, "knowledg": [5, 8], "tradit": [5, 8], "worri": 5, "coordin": [5, 6, 8, 10], "entir": [5, 6, 8, 9], "evolv": 5, "futur": [5, 8], "mind": [5, 10], "autonom": [5, 8], "terminologi": [5, 8], "rest": [5, 10], "billion": [5, 8], "larger": [5, 8], "higher": [5, 10], "issu": [5, 7], "discrimin": 5, "ephemer": [5, 6, 8, 10], "ellipt": [5, 6, 8, 10], "curv": [5, 6, 8, 10], "diffi": [5, 8, 10], "hellman": [5, 8, 10], "exchang": [5, 6, 8, 10], "curve25519": [5, 6, 8, 10], "throttl": 5, "thu": [5, 6, 8], "agnost": [5, 8], "equal": [5, 8], "keystor": 5, "degrad": 5, "term": [5, 8], "stationari": [5, 9], "candid": 5, "optim": 5, "intend": [5, 8], "trustless": [5, 8, 10], "leav": [5, 8], "free": [5, 7, 10], "unorganis": 5, "manner": 5, "properti": [5, 6], "far": [5, 8], "unexplor": 5, "dissolv": 5, "organ": 5, "restrict": 5, "legaci": 5, "unifi": 5, "underli": [5, 10], "carrier": [5, 10], "involv": 5, "hardlin": 5, "decid": [5, 6, 8], "illustr": [5, 8], "plan": [5, 8], "member": 5, "mainli": 5, "three": [5, 8], "hill": 5, "top": [5, 8], "chosen": [5, 8], "due": 5, "sight": 5, "becaus": [5, 8], "four": 5, "At": [5, 8], "raspberri": [5, 8, 9, 10], "usb": [5, 8, 9], "cabl": 5, "adapt": 5, "suppli": [5, 6, 8], "grow": 5, "place": [5, 8, 9], "core": [5, 8, 10], "those": [5, 8], "previous": [5, 6, 8], "d": [5, 9], "island": 5, "investig": 5, "dori": 5, "willing": 5, "she": 5, "her": 5, "home": 5, "newli": [5, 6, 8], "everyon": [5, 8], "vice": [5, 10], "versa": [5, 10], "vhf": [5, 8, 10], "outli": 5, "geograph": 5, "coverag": 5, "dai": 5, "find": [5, 8], "were": 5, "poorli": 5, "outlier": 5, "signatur": [6, 8, 10], "configdir": 6, "logdest": 6, "exactli": [6, 8], "independ": [6, 8, 10], "inter": 6, "soon": 6, "kill": [6, 8], "forcibli": [6, 9], "advantag": 6, "demand": 6, "mtu": [6, 8, 10], "500": [6, 8, 10], "adher": 6, "507": 6, "break": [6, 8, 10], "prerequisit": 6, "percentag": 6, "schedul": 6, "queu": [6, 9], "fewer": 6, "distant": 6, "smaller": 6, "eventu": 6, "drop": [6, 8, 9], "appli": [6, 8], "individu": [6, 8], "static": 6, "should_use_implicit_proof": 6, "explicit": 6, "implicit": [6, 8], "transport_en": 6, "create_kei": 6, "decrypt": [6, 8], "verif": [6, 8], "sign": [6, 8], "dh": 6, "keysiz": 6, "x25519": [6, 8, 10], "concaten": 6, "256": [6, 8], "128": [6, 8, 10], "constant": 6, "truncat": [6, 8], "recall_app_data": 6, "heard": [6, 8], "full_hash": 6, "sha": [6, 8], "truncated_hash": 6, "from_byt": 6, "prv_byte": 6, "save": [6, 8], "hazard": 6, "feed": 6, "from_fil": 6, "to_fil": 6, "Be": [6, 9], "otherwis": 6, "get_private_kei": 6, "get_public_kei": 6, "load_private_kei": 6, "load_public_kei": 6, "pub_byt": 6, "ciphertext": 6, "token": [6, 8], "keyerror": 6, "hold": [6, 8], "ciphertext_token": 6, "presenc": 6, "ingo": 6, "zero": [6, 10], "full_nam": [6, 9], "app_and_aspects_from_nam": 6, "tupl": 6, "hash_from_name_and_ident": 6, "path_respons": 6, "flag": [6, 8], "accepts_link": 6, "accept": [6, 7, 8, 9], "set_proof_requested_callback": 6, "proof_strategi": 6, "prove_non": 6, "prove_app": 6, "proof_requested_callback": 6, "allow_non": 6, "allowed_list": 6, "whatev": [6, 8], "funcion": 6, "allow_list": 6, "deregister_request_handl": 6, "deregist": 6, "symmetr": [6, 8], "typeerror": 6, "incompat": [6, 8], "set_default_app_data": 6, "callabl": 6, "clear_default_app_data": 6, "ae": [6, 8, 10], "deriv": [6, 8, 10], "secreci": [6, 8, 10], "payload": [6, 8], "instanti": 6, "encrypted_mdu": 6, "383": 6, "plain_mdu": 6, "464": 6, "resend": 6, "get_statu": 6, "cull": 6, "successful": 6, "proven": [6, 8], "established_callback": 6, "closed_callback": 6, "establishment_timeout_per_hop": 6, "keepalive_timeout_factor": 6, "4": [6, 8, 9], "calcul": [6, 8], "stale_grac": 6, "grace": 6, "keepal": [6, 8], "360": 6, "aliv": [6, 8], "stale_tim": 6, "720": 6, "mark": [6, 8], "stale": 6, "final": [6, 8], "torn": 6, "progress_callback": 6, "info": [6, 8, 9], "no_inbound_for": 6, "no_outbound_for": 6, "outbound": [6, 8], "inactive_for": 6, "purg": 6, "set_resource_callback": 6, "get_transfer_s": 6, "get_data_s": 6, "get_part": 6, "is_compress": 6, "begun": 6, "resource_strategi": 6, "accept_non": 6, "accept_app": 6, "resource_callback": 6, "unsupport": 6, "get_request_id": 6, "get_respons": 6, "get_response_tim": 6, "auto_compress": 6, "arbitrari": [6, 8, 10], "checksum": [6, 10], "Will": 6, "whenev": [6, 8], "cancel": 6, "total": [6, 8, 10], "get_seg": 6, "divid": 6, "get_hash": 6, "pathfinder_m": 6, "object": 6, "attribut": 6, "deregister_announce_handl": 6, "hops_to": 6, "next_hop": 6, "next_hop_interfac": 6, "on_interfac": 6, "tag": 6, "recurs": 6, "gratefulli": 7, "monero": 7, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 7, "ethereum": 7, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 7, "bitcoin": 7, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 7, "ko": 7, "fi": 7, "roadmap": 7, "realiti": 7, "quickli": [7, 8, 10], "sponsor": [7, 10], "dysfunct": 7, "analyt": 7, "telemetri": 7, "collect": 7, "under": [7, 9], "circumst": [7, 8], "reli": [7, 8], "fashion": 7, "u": [7, 8], "suggest": 7, "briefli": 8, "overal": 8, "principl": [8, 10], "author": 8, "That": 8, "said": 8, "document": 8, "pretti": 8, "sentiment": 8, "philosophi": 8, "problem": 8, "seek": 8, "solv": 8, "solut": 8, "primari": 8, "lack": 8, "my": 8, "belief": 8, "highli": 8, "peopl": 8, "machin": 8, "censorship": 8, "barrier": 8, "todai": 8, "centralis": 8, "trust": 8, "approv": 8, "gatekeep": 8, "inevit": 8, "lead": 8, "govern": 8, "alter": 8, "censor": 8, "persecut": 8, "unwant": 8, "actor": 8, "imposs": 8, "freeli": 8, "deploi": 8, "enhanc": 8, "agenc": 8, "freedom": 8, "permissionless": 8, "pick": 8, "ghz": 8, "off": [8, 10], "shelf": [8, 10], "ultim": 8, "vast": 8, "myriad": 8, "thousand": 8, "surveil": 8, "disassoci": 8, "oversight": 8, "beings": 8, "usabl": 8, "useabl": 8, "critic": [8, 9], "agnostic": 8, "shall": 8, "handheld": 8, "stream": 8, "modifi": [8, 9], "interest": 8, "strong": 8, "oneself": 8, "unlicens": 8, "licens": 8, "condit": 8, "pmr": 8, "cb": 8, "wish": [8, 9], "written": 8, "programm": 8, "orient": 8, "multipoint": 8, "recipi": 8, "idea": [8, 9], "singular": 8, "_represented_": 8, "characterist": 8, "13425ec15b621c1d928589718000d814": 8, "trade": 8, "accommod": 8, "simultan": 8, "unlik": 8, "nears": 8, "congest": 8, "galact": 8, "scale": 8, "obvious": 8, "ridicul": 8, "multi": [8, 9, 10], "special": [8, 9], "uniqu": [8, 10], "ecdh": [8, 10], "creator": 8, "correspond": 8, "possess": 8, "although": [8, 10], "abstract": 8, "capabl": 8, "dot": [8, 9], "notat": [8, 9], "repres": 8, "plenti": 8, "environment": 8, "monitor": 8, "measur": 8, "environmentlogg": 8, "remotesensor": 8, "temperatur": 8, "4faf1b2e0a077e6a9d92fa051f256038": 8, "advis": 8, "expand": 8, "structur": 8, "recap": 8, "indirectli": 8, "awar": 8, "ledger": 8, "therefor": [8, 10], "definit": 8, "messeng": 8, "nicknam": 8, "ed25519": [8, 10], "reconstruct": 8, "notic": [8, 9], "piec": 8, "intention": 8, "infer": 8, "throughout": 8, "accord": 8, "around": 8, "assign": [8, 9], "topic": 8, "necessarili": 8, "person": 8, "entiti": 8, "robot": 8, "sensor": 8, "someth": 8, "agent": 8, "manipul": 8, "multilater": 8, "creation": 8, "great": 8, "suffic": 8, "cluster": 8, "hear": 8, "But": 8, "introduc": 8, "lot": 8, "surviv": 8, "overcom": 8, "challeng": 8, "asymmetr": [8, 10], "closer": 8, "distinguish": 8, "contend": 8, "enable_transport": [8, 9], "retransmit": 8, "randomis": 8, "prioriti": 8, "invers": 8, "proport": 8, "count": 8, "insert": 8, "closest": 8, "greater": 8, "retri": 8, "newer": 8, "discard": 8, "contact": 8, "shortest": 8, "predict": 8, "constantli": 8, "earlier": 8, "opt": 8, "against": 8, "neither": 8, "session": 8, "bidirect": 8, "travers": 8, "rememb": 8, "subsequ": 8, "ten": 8, "advanc": 8, "confirm": [8, 10], "insid": 8, "intermediari": 8, "moment": [8, 10], "methodologi": [8, 9], "answer": [8, 9], "malici": 8, "pretend": 8, "recreat": 8, "rotat": 8, "procedur": 8, "memori": 8, "thereaft": 8, "297": [8, 10], "practic": [8, 10], "neglig": 8, "1200": 8, "96": 8, "keypair": 8, "simplic": 8, "explan": [8, 9], "lki": 8, "laid": 8, "had": 8, "construct": 8, "lkr": 8, "chose": 8, "bi": 8, "direction": 8, "unequivoc": 8, "retransmiss": 8, "reassembl": 8, "programmat": 8, "satisfi": 8, "half": [8, 10], "duplex": [8, 10], "averag": 8, "throughput": [8, 10], "x": [8, 9], "runtim": 8, "consist": 8, "whereupon": 8, "stabl": [8, 10], "maintain": 8, "year": 8, "microcontrol": 8, "430": 8, "868": 8, "900": 8, "debian": [8, 9], "recent": 8, "mac": 8, "tailor": 8, "treat": 8, "regard": 8, "preshar": 8, "ifac": [8, 9], "onto": 8, "compos": 8, "field": 8, "header": 8, "32": 8, "context": 8, "465": 8, "vari": [8, 9], "64": [8, 9], "00": [8, 9], "01": 8, "reserv": 8, "11": 8, "_______": 8, "________________": 8, "________": 8, "______": 8, "__": 8, "_": 8, "01010000": 8, "00000100": 8, "hash1": 8, "hash2": 8, "header_2": 8, "00000000": 8, "00000111": 8, "header_1": 8, "10000000": 8, "exclud": 8, "51": 8, "157": 8, "83": [8, 9], "115": 8, "99": 8, "conceptu": 8, "x22519": 8, "hkdf": 8, "fernet": [8, 10], "cbc": [8, 10], "hmac": [8, 10], "hashlib": 8, "pkcs7": [8, 10], "pad": [8, 10], "trivial": [8, 10], "consequ": 8, "backend": 8, "loss": 8, "scrutini": 8, "review": [8, 10], "risk": 8, "pose": 8, "driver": [9, 10], "privileg": 9, "light": 9, "weight": 9, "boot": 9, "verbos": 9, "exampleconfig": 9, "ie": 9, "remov": 9, "breviti": 9, "socket": 9, "turn": 9, "share_inst": 9, "shared_instance_port": 9, "37428": 9, "instance_control_port": 9, "37429": 9, "panic": 9, "unrecover": 9, "occur": [9, 10], "panic_on_interface_error": 9, "warn": 9, "6": 9, "debug": 9, "unus": 9, "order": 9, "teach": 9, "task": 9, "v": 9, "show": 9, "ifconfig": 9, "gbp": 9, "13": 9, "kb": 9, "86": 9, "mbp": 9, "63": 9, "23": 9, "80": 9, "17": 9, "tcpinterfac": 9, "unsign": 9, "187": 9, "27": 9, "74": 9, "uhf": [9, 10], "30": 9, "kbp": 9, "e702c42ba8": 9, "49": 9, "9": 9, "5245a8efe1788c6a1cd36144a270e13b": 9, "c89b4da064bf66d280f0e4d8abfd9806": 9, "f53a1c4278e0726bb73fcc623d6ce763": 9, "reticulu": 9, "w": 9, "posit": 9, "probe": 9, "2d03725b327348980d570f739a3a5708": 9, "38": 9, "469": 9, "1726dbad538775b5bf9b0ea25a4079c8": 9, "c50cc4e4f7838b6c31f60ab9032cbc62": 9, "copi": 9, "tgz": 9, "73cbd378bb0286ed11a707c13447bb1": 9, "allowed_hash": 9, "decreas": 9, "auth": 9, "941bed5e228775e5a8079fc38b1ccf3f": 9, "1b03013c25f1c2ca068a4f080b844a10": 9, "7a55144adf826958a9529a3bcf08b149": 9, "cat": 9, "proc": 9, "cpuinfo": 9, "pseudo": 9, "shell": 9, "stderr": 9, "noauth": 9, "noid": 9, "mirror": 9, "max": 9, "perman": 9, "administr": 9, "ubuntu": 9, "ftdi_ft230x_basic_uart_43891ckm": 9, "if00": 9, "port0": 9, "plug": 9, "unplug": 9, "systemd": 9, "usr": 9, "bin": 9, "etc": 9, "execstartpr": 9, "restart": 9, "restartsec": 9, "usernameher": 9, "execstart": 9, "wantedbi": 9, "systemctl": 9, "readili": 10, "unforg": 10, "acknowledg": 10, "resili": 10, "userland": 10, "beta": 10, "bug": 10, "warrant": 10, "sha256": 10, "iv": 10, "urandom": 10, "intuit": 10, "friendli": 10, "44": 10, "gigabyt": 10, "scalabl": 10, "hoc": 10, "optic": 10, "transform": 10, "stop": 10, "fact": 10, "strength": 10, "generalis": 10, "fibr": 10, "popular": 10, "ideal": 10, "stdio": 10, "hack": 10, "foremost": 10, "audit": 10, "privaci": 10, "thorough": 10, "research": 10}, "objects": {"RNS": [[6, 0, 1, "", "Destination"], [6, 0, 1, "", "Identity"], [6, 0, 1, "", "Link"], [6, 0, 1, "", "Packet"], [6, 0, 1, "", "PacketReceipt"], [6, 0, 1, "", "RequestReceipt"], [6, 0, 1, "", "Resource"], [6, 0, 1, "", "Reticulum"], [6, 0, 1, "", "Transport"]], "RNS.Destination": [[6, 1, 1, "", "accepts_links"], [6, 1, 1, "", "announce"], [6, 1, 1, "", "app_and_aspects_from_name"], [6, 1, 1, "", "clear_default_app_data"], [6, 1, 1, "", "create_keys"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "deregister_request_handler"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "full_name"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "hash"], [6, 1, 1, "", "hash_from_name_and_identity"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "register_request_handler"], [6, 1, 1, "", "set_default_app_data"], [6, 1, 1, "", "set_link_established_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_proof_requested_callback"], [6, 1, 1, "", "set_proof_strategy"], [6, 1, 1, "", "sign"]], "RNS.Identity": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "KEYSIZE"], [6, 2, 1, "", "TRUNCATED_HASHLENGTH"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "from_bytes"], [6, 1, 1, "", "from_file"], [6, 1, 1, "", "full_hash"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "get_public_key"], [6, 1, 1, "", "get_random_hash"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "load_public_key"], [6, 1, 1, "", "recall"], [6, 1, 1, "", "recall_app_data"], [6, 1, 1, "", "sign"], [6, 1, 1, "", "to_file"], [6, 1, 1, "", "truncated_hash"], [6, 1, 1, "", "validate"]], "RNS.Link": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [6, 2, 1, "", "KEEPALIVE"], [6, 2, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [6, 2, 1, "", "STALE_GRACE"], [6, 2, 1, "", "STALE_TIME"], [6, 1, 1, "", "get_remote_identity"], [6, 1, 1, "", "identify"], [6, 1, 1, "", "inactive_for"], [6, 1, 1, "", "no_inbound_for"], [6, 1, 1, "", "no_outbound_for"], [6, 1, 1, "", "request"], [6, 1, 1, "", "set_link_closed_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_remote_identified_callback"], [6, 1, 1, "", "set_resource_callback"], [6, 1, 1, "", "set_resource_concluded_callback"], [6, 1, 1, "", "set_resource_started_callback"], [6, 1, 1, "", "set_resource_strategy"], [6, 1, 1, "", "teardown"]], "RNS.Packet": [[6, 2, 1, "", "ENCRYPTED_MDU"], [6, 2, 1, "", "PLAIN_MDU"], [6, 1, 1, "", "resend"], [6, 1, 1, "", "send"]], "RNS.PacketReceipt": [[6, 1, 1, "", "get_rtt"], [6, 1, 1, "", "get_status"], [6, 1, 1, "", "set_delivery_callback"], [6, 1, 1, "", "set_timeout"], [6, 1, 1, "", "set_timeout_callback"]], "RNS.RequestReceipt": [[6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_request_id"], [6, 1, 1, "", "get_response"], [6, 1, 1, "", "get_response_time"], [6, 1, 1, "", "get_status"]], "RNS.Resource": [[6, 1, 1, "", "advertise"], [6, 1, 1, "", "cancel"], [6, 1, 1, "", "get_data_size"], [6, 1, 1, "", "get_hash"], [6, 1, 1, "", "get_parts"], [6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_segments"], [6, 1, 1, "", "get_transfer_size"], [6, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[6, 2, 1, "", "ANNOUNCE_CAP"], [6, 2, 1, "", "MTU"], [6, 1, 1, "", "should_use_implicit_proof"], [6, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[6, 2, 1, "", "PATHFINDER_M"], [6, 1, 1, "", "deregister_announce_handler"], [6, 1, 1, "", "has_path"], [6, 1, 1, "", "hops_to"], [6, 1, 1, "", "next_hop"], [6, 1, 1, "", "next_hop_interface"], [6, 1, 1, "", "register_announce_handler"], [6, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 7, 8], "exampl": [0, 5], "minim": 0, "announc": [0, 4, 8], "broadcast": 0, "echo": 0, "link": [0, 8], "identif": 0, "request": 0, "respons": 0, "filetransf": 0, "get": [1, 8], "start": 1, "fast": 1, "try": 1, "us": [1, 9, 10], "reticulum": [1, 2, 3, 7, 8, 9, 10], "base": [1, 2], "program": [1, 9], "nomad": 1, "network": [1, 3, 5], "sideband": 1, "includ": [1, 9], "util": [1, 9], "creat": [1, 2], "With": 1, "connect": 1, "instanc": 1, "over": [1, 5], "internet": [1, 5], "public": [1, 8], "testnet": 1, "ad": 1, "radio": 1, "interfac": [1, 4, 8, 10], "develop": 1, "particip": 1, "arm64": 1, "android": 1, "pure": 1, "python": 1, "commun": 2, "hardwar": 2, "rnode": [2, 4], "support": [2, 4, 7], "board": 2, "lilygo": 2, "lora32": 2, "v2": 2, "1": 2, "0": 2, "t": 2, "beam": 2, "heltec": 2, "unsign": 2, "x": 2, "v1": 2, "instal": 2, "usag": 2, "supplier": 2, "wifi": 2, "combin": 2, "type": [2, 8, 10], "stack": 3, "manual": 3, "tabl": 3, "Of": 3, "content": 3, "indic": 3, "auto": 4, "i2p": 4, "tcp": 4, "server": 4, "client": 4, "udp": 4, "lora": [4, 5], "serial": [4, 9], "pipe": 4, "kiss": 4, "ax": 4, "25": 4, "common": 4, "option": 4, "mode": 4, "rate": 4, "control": 4, "build": 5, "concept": 5, "overview": 5, "scenario": 5, "interconnect": 5, "site": 5, "bridg": 5, "growth": 5, "converg": 5, "api": 6, "refer": [6, 8], "donat": 7, "provid": 7, "feedback": 7, "contribut": 7, "understand": 8, "motiv": 8, "goal": 8, "introduct": 8, "basic": 8, "function": 8, "destin": 8, "name": [8, 9], "kei": 8, "ident": 8, "further": 8, "transport": 8, "node": 8, "The": [8, 9], "mechan": 8, "detail": 8, "reach": 8, "establish": 8, "resourc": 8, "setup": 8, "protocol": 8, "specif": 8, "packet": 8, "prioritis": 8, "access": 8, "wire": 8, "format": 8, "propag": 8, "rule": 8, "cryptograph": 8, "primit": 8, "your": 9, "system": 9, "configur": 9, "data": 9, "rnsd": 9, "rnstatu": 9, "rnpath": 9, "rnprobe": 9, "rncp": 9, "rnx": 9, "improv": 9, "fix": 9, "port": 9, "servic": 9, "what": 10, "i": 10, "current": 10, "statu": 10, "doe": 10, "offer": 10, "where": 10, "can": 10, "devic": 10, "caveat": 10, "emptor": 10}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Getting Started Fast": [[1, "getting-started-fast"]], "Try Using a Reticulum-based Program": [[1, "try-using-a-reticulum-based-program"]], "Nomad Network": [[1, "nomad-network"]], "Sideband": [[1, "sideband"]], "Using the Included Utilities": [[1, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[1, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[1, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[1, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[1, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[1, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[1, "participate-in-reticulum-development"]], "Reticulum on ARM64": [[1, "reticulum-on-arm64"]], "Reticulum on Android": [[1, "reticulum-on-android"]], "Pure-Python Reticulum": [[1, "pure-python-reticulum"]], "Communications Hardware": [[2, "communications-hardware"]], "RNode": [[2, "rnode"]], "Creating RNodes": [[2, "creating-rnodes"]], "Supported Boards": [[2, "supported-boards"]], "LilyGO LoRa32 v2.1": [[2, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[2, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[2, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[2, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[2, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[2, "unsigned-rnode-v1-x"]], "Installation": [[2, "installation"]], "Usage with Reticulum": [[2, "usage-with-reticulum"]], "Suppliers": [[2, "suppliers"]], "WiFi-based Hardware": [[2, "wifi-based-hardware"]], "Combining Hardware Types": [[2, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[3, "reticulum-network-stack-manual"]], "Table Of Contents": [[3, "table-of-contents"]], "Indices and Tables": [[3, "indices-and-tables"]], "Supported Interfaces": [[4, "supported-interfaces"]], "Auto Interface": [[4, "auto-interface"]], "I2P Interface": [[4, "i2p-interface"]], "TCP Server Interface": [[4, "tcp-server-interface"]], "TCP Client Interface": [[4, "tcp-client-interface"]], "UDP Interface": [[4, "udp-interface"]], "RNode LoRa Interface": [[4, "rnode-lora-interface"]], "Serial Interface": [[4, "serial-interface"]], "Pipe Interface": [[4, "pipe-interface"]], "KISS Interface": [[4, "kiss-interface"]], "AX.25 KISS Interface": [[4, "ax-25-kiss-interface"]], "Common Interface Options": [[4, "common-interface-options"]], "Interface Modes": [[4, "interface-modes"]], "Announce Rate Control": [[4, "announce-rate-control"]], "Building Networks": [[5, "building-networks"]], "Concepts & Overview": [[5, "concepts-overview"]], "Example Scenarios": [[5, "example-scenarios"]], "Interconnected LoRa Sites": [[5, "interconnected-lora-sites"]], "Bridging Over the Internet": [[5, "bridging-over-the-internet"]], "Growth and Convergence": [[5, "growth-and-convergence"]], "Support Reticulum": [[7, "support-reticulum"]], "Donations": [[7, "donations"]], "Provide Feedback": [[7, "provide-feedback"]], "Contribute Code": [[7, "contribute-code"]], "Understanding Reticulum": [[8, "understanding-reticulum"]], "Motivation": [[8, "motivation"]], "Goals": [[8, "goals"]], "Introduction & Basic Functionality": [[8, "introduction-basic-functionality"]], "Destinations": [[8, "destinations"]], "Destination Naming": [[8, "destination-naming"]], "Public Key Announcements": [[8, "public-key-announcements"]], "Identities": [[8, "understanding-identities"]], "Getting Further": [[8, "getting-further"]], "Reticulum Transport": [[8, "reticulum-transport"]], "Node Types": [[8, "node-types"]], "The Announce Mechanism in Detail": [[8, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[8, "reaching-the-destination"]], "Link Establishment in Detail": [[8, "link-establishment-in-detail"]], "Resources": [[8, "resources"]], "Reference Setup": [[8, "reference-setup"]], "Protocol Specifics": [[8, "protocol-specifics"]], "Packet Prioritisation": [[8, "packet-prioritisation"]], "Interface Access Codes": [[8, "interface-access-codes"]], "Wire Format": [[8, "wire-format"]], "Announce Propagation Rules": [[8, "announce-propagation-rules"]], "Cryptographic Primitives": [[8, "cryptographic-primitives"]], "Using Reticulum on Your System": [[9, "using-reticulum-on-your-system"]], "Configuration & Data": [[9, "configuration-data"]], "Included Utility Programs": [[9, "included-utility-programs"]], "The rnsd Utility": [[9, "the-rnsd-utility"]], "The rnstatus Utility": [[9, "the-rnstatus-utility"]], "The rnpath Utility": [[9, "the-rnpath-utility"]], "The rnprobe Utility": [[9, "the-rnprobe-utility"]], "The rncp Utility": [[9, "the-rncp-utility"]], "The rnx Utility": [[9, "the-rnx-utility"]], "Improving System Configuration": [[9, "improving-system-configuration"]], "Fixed Serial Port Names": [[9, "fixed-serial-port-names"]], "Reticulum as a System Service": [[9, "reticulum-as-a-system-service"]], "What is Reticulum?": [[10, "what-is-reticulum"]], "Current Status": [[10, "current-status"]], "What does Reticulum Offer?": [[10, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[10, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[10, "interface-types-and-devices"]], "Caveat Emptor": [[10, "caveat-emptor"]], "API Reference": [[6, "api-reference"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[6, "RNS.Reticulum.ANNOUNCE_CAP"]], "curve (rns.identity attribute)": [[6, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[6, "RNS.Link.CURVE"]], "destination (class in rns)": [[6, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[6, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[6, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[6, "RNS.Identity"]], "keepalive (rns.link attribute)": [[6, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[6, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[6, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[6, "RNS.Link"]], "mtu (rns.reticulum attribute)": [[6, "RNS.Reticulum.MTU"]], "pathfinder_m (rns.transport attribute)": [[6, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[6, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[6, "RNS.Packet"]], "packetreceipt (class in rns)": [[6, "RNS.PacketReceipt"]], "requestreceipt (class in rns)": [[6, "RNS.RequestReceipt"]], "resource (class in rns)": [[6, "RNS.Resource"]], "reticulum (class in rns)": [[6, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[6, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[6, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[6, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[6, "RNS.Transport"]], "accepts_links() (rns.destination method)": [[6, "RNS.Destination.accepts_links"]], "advertise() (rns.resource method)": [[6, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[6, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[6, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[6, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[6, "RNS.Destination.clear_default_app_data"]], "create_keys() (rns.destination method)": [[6, "RNS.Destination.create_keys"]], "decrypt() (rns.destination method)": [[6, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[6, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[6, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[6, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[6, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[6, "RNS.Identity.encrypt"]], "from_bytes() (rns.identity static method)": [[6, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[6, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[6, "RNS.Identity.full_hash"]], "full_name() (rns.destination static method)": [[6, "RNS.Destination.full_name"]], "get_data_size() (rns.resource method)": [[6, "RNS.Resource.get_data_size"]], "get_hash() (rns.resource method)": [[6, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[6, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[6, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[6, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[6, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[6, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[6, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[6, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[6, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[6, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[6, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[6, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[6, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[6, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[6, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[6, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[6, "RNS.Resource.is_compressed"]], "load_private_key() (rns.destination method)": [[6, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[6, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[6, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[6, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[6, "RNS.Transport.next_hop_interface"]], "no_inbound_for() (rns.link method)": [[6, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[6, "RNS.Link.no_outbound_for"]], "recall() (rns.identity static method)": [[6, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[6, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[6, "RNS.Transport.register_announce_handler"]], "register_request_handler() (rns.destination method)": [[6, "RNS.Destination.register_request_handler"]], "request() (rns.link method)": [[6, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[6, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[6, "RNS.Packet.resend"]], "send() (rns.packet method)": [[6, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[6, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[6, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[6, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[6, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[6, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[6, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[6, "RNS.Destination.set_proof_strategy"]], "set_remote_identified_callback() (rns.link method)": [[6, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[6, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[6, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[6, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[6, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[6, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[6, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[6, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[6, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[6, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[6, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[6, "RNS.Identity.truncated_hash"]], "validate() (rns.identity method)": [[6, "RNS.Identity.validate"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["examples", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 1, 4, 5, 6, 8, 10], "number": [0, 1, 4, 5, 6, 8, 9], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "includ": [0, 2, 3, 4, 6, 8], "sourc": [0, 1, 2, 5, 8, 10], "distribut": [0, 1, 5, 6, 8, 9], "reticulum": [0, 4, 5, 6], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "us": [0, 2, 3, 4, 5, 6, 8], "learn": [0, 1, 7, 8], "how": [0, 1, 2, 4, 5, 8, 10], "write": [0, 1, 4, 6, 8], "your": [0, 1, 2, 3, 4, 5, 7, 8, 10], "own": [0, 1, 5, 6, 8, 9], "program": [0, 3, 4, 6, 8, 10], "The": [0, 1, 2, 3, 4, 5, 6, 10], "demonstr": [0, 4], "bare": 0, "minimum": [0, 4, 5, 8], "setup": [0, 1, 3, 4], "requir": [0, 1, 4, 5, 8, 9, 10], "connect": [0, 2, 3, 4, 5, 6, 8, 9, 10], "network": [0, 2, 4, 6, 8, 9, 10], "from": [0, 1, 2, 4, 5, 6, 8, 9, 10], "In": [0, 1, 2, 4, 5, 6, 8, 9, 10], "about": [0, 1, 2, 4, 5, 6, 8], "five": 0, "line": [0, 1, 2, 4, 5, 8, 9, 10], "have": [0, 1, 2, 4, 5, 6, 8, 9], "stack": [0, 1, 5, 6, 8, 9, 10], "initialis": [0, 6, 9], "readi": [0, 1, 2, 4, 5, 6, 10], "pass": [0, 2, 4, 5, 6, 8, 9], "traffic": [0, 1, 4, 5, 6, 8, 9], "thi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "rn": [0, 1, 6, 8, 9], "start": [0, 2, 3, 4, 6, 8, 9], "up": [0, 1, 2, 4, 5, 8, 9, 10], "gener": [0, 1, 2, 4, 5, 6, 8, 9, 10], "new": [0, 4, 5, 6, 8, 9], "destin": [0, 1, 3, 4, 5, 6, 9], "let": [0, 1, 4, 5, 8, 9], "user": [0, 1, 4, 5, 8, 9], "send": [0, 4, 6, 8, 9], "an": [0, 1, 2, 4, 5, 6, 8, 9, 10], "import": [0, 1, 2, 4, 5, 7, 8], "argpars": 0, "": [0, 1, 4, 5, 8, 9, 10], "defin": [0, 4, 8, 9], "app": [0, 1, 6, 8], "name": [0, 3, 4, 5, 6], "we": [0, 1, 2, 4, 7, 8], "ll": [0, 1, 10], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "creat": [0, 3, 4, 5, 6, 8, 9, 10], "sinc": [0, 1, 4, 5, 6, 8], "basic": [0, 1, 3, 6, 9], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "part": [0, 4, 5, 6, 8], "rang": [0, 1, 2, 4, 5, 8, 9, 10], "util": [0, 2, 3, 4, 8], "put": [0, 2, 4], "them": [0, 1, 2, 4, 5, 7, 8, 9], "within": [0, 1, 4, 5, 6, 8], "namespac": 0, "example_util": [0, 9], "app_nam": [0, 6], "execut": [0, 1, 4, 6, 9], "when": [0, 1, 2, 4, 5, 6, 8, 9], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 1, 4, 5, 6, 8], "first": [0, 1, 4, 6, 8, 9], "randomli": [0, 8], "ident": [0, 1, 3, 6, 9, 10], "our": [0, 8], "just": [0, 1, 2, 4, 5, 8, 10], "endpoint": [0, 5, 6, 8], "address": [0, 1, 4, 5, 6, 8, 10], "commun": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], "also": [0, 1, 2, 4, 5, 6, 8, 9, 10], "exist": [0, 1, 2, 4, 8, 9, 10], "which": [0, 1, 4, 5, 6, 8, 9], "know": [0, 1, 2, 5, 6, 8], "thei": [0, 1, 4, 5, 6, 8, 9], "reachabl": [0, 1, 4, 5, 6, 8, 9], "autoomat": 0, "path": [0, 1, 2, 4, 6, 8, 9], "anywher": [0, 4], "els": [0, 5, 8], "IN": [0, 6], "singl": [0, 4, 6, 8, 9, 10], "minimalsampl": 0, "configur": [0, 1, 2, 3, 4, 5, 6, 8, 10], "automat": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prove": [0, 8], "packet": [0, 1, 2, 3, 4, 5, 6, 9, 10], "adress": [0, 6, 8], "By": [0, 1, 4, 6, 8, 9], "do": [0, 1, 2, 4, 6, 8, 10], "proof": [0, 6, 8, 9], "each": [0, 1, 4, 5, 8, 9], "incom": [0, 4, 6, 9], "transmit": [0, 4, 8], "back": [0, 4, 8, 10], "sender": [0, 1, 5, 8, 9], "anyon": [0, 1, 2, 5, 6, 8, 9], "tri": 0, "whether": [0, 4, 6, 8], "wa": [0, 2, 4, 5, 6, 8, 10], "receiv": [0, 1, 4, 6, 8, 9], "correctli": 0, "set_proof_strategi": [0, 6], "prove_al": [0, 6], "everyth": [0, 5, 8], "hand": [0, 1], "over": [0, 2, 3, 4, 6, 8, 9, 10], "control": [0, 1, 2, 3, 5, 6, 8], "loop": 0, "announceloop": 0, "log": [0, 4, 9], "prettyhexrep": 0, "hash": [0, 1, 6, 8, 9], "run": [0, 1, 2, 4, 5, 6, 8, 9, 10], "hit": 0, "enter": [0, 9], "manual": [0, 1, 4, 5, 6, 9], "ctrl": 0, "c": [0, 5], "quit": 0, "until": [0, 4, 6], "exit": [0, 1, 6, 9], "If": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server": [0, 1, 2, 3, 9], "client": [0, 1, 2, 3, 6], "messag": [0, 1, 6, 8, 9], "direct": [0, 1, 2, 5, 6, 8, 9], "toward": [0, 4, 8], "while": [0, 1, 2, 4, 5, 6, 8, 10], "true": [0, 4, 6, 9], "input": [0, 9], "sent": [0, 1, 6, 8, 9], "startup": 0, "get": [0, 2, 3, 4, 6, 10], "pars": 0, "desir": [0, 2, 4, 8], "mode": [0, 1, 2, 3, 8, 9, 10], "__name__": 0, "__main__": 0, "try": [0, 3, 4], "parser": 0, "argumentpars": 0, "descript": [0, 9], "add_argu": 0, "config": [0, 1, 2, 5, 9], "action": 0, "store": [0, 2, 8, 9], "default": [0, 1, 2, 4, 5, 6, 8, 9], "none": [0, 4, 6, 8, 9], "help": [0, 2, 5, 7, 8, 9, 10], "altern": [0, 4, 9], "directori": [0, 9], "type": [0, 1, 3, 4, 5, 6, 9], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 4], "keyboardinterrupt": 0, "print": [0, 4, 9], "found": [0, 1, 4, 5, 8, 9], "http": [0, 1, 7], "github": [0, 1, 7], "com": [0, 1, 7], "markqvist": [0, 1, 7], "blob": [0, 8], "master": [0, 6], "py": [0, 1, 8], "build": [0, 1, 2, 3, 4, 8, 10], "upon": [0, 8], "previou": 0, "explor": [0, 8, 10], "notif": [0, 6], "relev": [0, 2, 4, 6, 8, 9], "set": [0, 1, 2, 4, 5, 6, 8, 9, 10], "callback": [0, 6], "applic": [0, 4, 5, 6, 8, 9], "arriv": [0, 8], "random": [0, 6, 8], "two": [0, 1, 2, 4, 5, 8], "list": [0, 1, 2, 4, 6, 8, 10], "string": [0, 6], "app_data": [0, 6], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 1], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 1, 2, 5, 8, 10], "destination_1": 0, "destination_2": 0, "handler": [0, 6], "onli": [0, 1, 2, 4, 5, 6, 8, 9, 10], "ask": [0, 2, 6], "chang": [0, 1, 4, 6, 8, 9, 10], "filter": [0, 5, 8], "see": [0, 1, 4, 5, 6, 8, 9, 10], "what": [0, 1, 3, 6, 8], "happen": [0, 6, 8], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 6], "regist": [0, 6], "transport": [0, 1, 3, 4, 5, 6, 9, 10], "register_announce_handl": [0, 6], "select": [0, 4], "randint": 0, "0": [0, 4, 6, 8, 9, 10], "len": 0, "1": [0, 4, 6, 8, 9], "data": [0, 1, 3, 4, 5, 6, 8, 10], "encod": 0, "utf": 0, "8": [0, 4, 9], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "class": [0, 5, 6, 10], "method": [0, 1, 4, 6, 8], "take": [0, 1, 4, 8, 9, 10], "option": [0, 1, 2, 3, 5, 6, 8, 9], "argument": [0, 6, 9], "instanc": [0, 3, 4, 6, 8, 9], "some": [0, 1, 2, 4, 5, 8, 9], "want": [0, 1, 2, 4, 5, 8, 9, 10], "aspect": [0, 2, 4, 6, 8], "__init__": 0, "self": [0, 5, 10], "call": [0, 5, 6, 8, 10], "system": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10], "match": [0, 4, 8], "specif": [0, 2, 3, 4, 6, 10], "cannot": [0, 1], "wildcard": 0, "received_announc": [0, 6], "destination_hash": [0, 6, 9], "announced_ident": [0, 6], "contain": [0, 5, 6, 8, 9], "follow": [0, 1, 2, 4, 7, 8, 9, 10], "decod": 0, "plaintext": [0, 6], "unencrypt": [0, 6, 8], "inform": [0, 1, 3, 4, 5, 6, 8, 9], "ani": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "listen": [0, 4, 8, 9], "sy": 0, "channel": [0, 4, 5, 7, 8, 10], "did": 0, "one": [0, 1, 2, 4, 5, 6, 8, 9, 10], "public_inform": 0, "ad": [0, 2, 3, 4, 5, 6, 8, 10], "so": [0, 1, 2, 4, 5, 6, 7, 8, 10], "differ": [0, 1, 2, 4, 5, 6, 8, 9, 10], "plain": [0, 4, 6, 8], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 1, 2, 4, 5, 6, 9], "everi": [0, 4, 5, 6, 8], "time": [0, 1, 2, 4, 5, 6, 8, 9], "set_packet_callback": [0, 6], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 1, 2, 4, 5, 8, 9], "out": [0, 1, 2, 4, 5, 6, 8, 9, 10], "r": [0, 4, 8, 9], "n": [0, 8, 9], "end": [0, 4, 5, 6, 8, 10], "stdout": [0, 4, 9], "flush": 0, "text": [0, 1, 5, 8], "prompt": 0, "channelarg": 0, "between": [0, 4, 5, 6, 8], "interfac": [0, 2, 3, 5, 6, 9], "simpl": [0, 2, 6, 8, 9, 10], "respond": [0, 6], "receipt": [0, 6, 8], "choos": [0, 1, 4, 8], "global": [0, 1, 4, 5, 8, 10], "server_ident": 0, "queri": [0, 1, 6], "abl": [0, 1, 4, 5, 6, 8, 9], "verifi": [0, 6, 8], "repli": [0, 9], "encrypt": [0, 1, 5, 6, 8, 10], "wai": [0, 1, 4, 5, 8], "certain": [0, 4, 5, 7, 8], "than": [0, 1, 4, 5, 8], "read": [0, 1, 4, 6, 8, 9], "echo_destin": 0, "tell": [0, 4], "function": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10], "server_callback": 0, "wait": [0, 4, 8, 9], "go": [0, 1, 4, 8], "handl": [0, 2, 4, 5, 6, 8, 9, 10], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 4], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 6, 9], "binari": [0, 1, 8], "represent": 0, "command": [0, 1, 4, 9], "dest_len": 0, "truncated_hashlength": [0, 6], "2": [0, 4, 6, 8, 9], "rais": [0, 6], "valueerror": [0, 6], "length": [0, 4, 6, 8], "invalid": [0, 6], "hex": 0, "hexadecim": [0, 8, 9], "charact": 0, "byte": [0, 6, 8, 9, 10], "format": [0, 3, 10], "fromhex": 0, "e": [0, 5], "check": [0, 1, 6, 8], "overrid": 0, "loglevel": [0, 6, 9], "provid": [0, 1, 2, 3, 4, 5, 6, 8, 10], "feedback": [0, 3], "log_info": 0, "doe": [0, 1, 2, 3, 4, 5, 6, 8, 9], "load": [0, 1, 6, 9], "has_path": [0, 6], "To": [0, 1, 2, 4, 5, 8, 9, 10], "public": [0, 3, 4, 6], "kei": [0, 3, 5, 6, 10], "done": [0, 1, 4, 5, 8, 9], "recal": [0, 6], "modul": [0, 1, 2, 8, 9, 10], "known": [0, 6, 8, 9], "return": [0, 6, 9], "outgo": [0, 4, 6, 8, 9], "got": 0, "correct": [0, 8], "convent": 0, "request_destin": 0, "add": [0, 1, 4, 5, 9], "echo_request": 0, "get_random_hash": [0, 6], "successfulli": [0, 8], "packetreceipt": [0, 3, 6], "packet_receipt": [0, 6], "set_timeout": [0, 6], "set_timeout_callback": [0, 6], "packet_timed_out": 0, "deliveri": [0, 1, 6, 10], "set_delivery_callback": [0, 6], "packet_deliv": 0, "yet": [0, 4, 8], "request_path": [0, 6], "statu": [0, 1, 3, 4, 6, 8, 9], "deliv": [0, 6], "rtt": [0, 6, 8], "get_rtt": [0, 6], "round": [0, 6, 9], "3": [0, 4, 8, 9, 10], "rttstring": 0, "second": [0, 4, 6, 8, 9, 10], "1000": 0, "millisecond": [0, 9], "proof_packet": 0, "valid": [0, 4, 6, 8, 9], "trip": [0, 6, 9], "fail": [0, 6], "store_tru": 0, "t": [0, 1, 4, 5, 6, 9], "metavar": 0, "float": [0, 6], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 1, 4, 5, 6, 10], "remot": [0, 6, 9], "forth": 0, "o": [0, 8, 9, 10], "refer": [0, 1, 3], "latest": [0, 1, 4], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 6], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 6], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 1, 4, 6, 8], "last": [0, 4, 6], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 9], "begin": [0, 2, 6], "And": 0, "client_packet_receiv": 0, "close": [0, 5, 6, 9], "link_establish": 0, "link_clos": 0, "interact": [0, 1, 6, 8, 9], "client_loop": 0, "becom": [0, 1, 5, 8], "should_quit": 0, "fals": [0, 4, 6, 9], "should": [0, 1, 2, 4, 5, 6, 8, 9, 10], "q": [0, 9], "teardown": [0, 6], "mdu": 0, "size": [0, 1, 4, 6, 8, 9], "exce": [0, 4, 6], "log_error": 0, "error": [0, 1, 7, 9], "ha": [0, 1, 2, 4, 5, 6, 8, 10], "been": [0, 1, 2, 4, 5, 6, 8, 10], "later": [0, 1, 4], "teardown_reason": 0, "now": [0, 1, 5, 8, 9], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 4, 6, 9], "_exit": 0, "identifi": [0, 4, 6, 8, 9], "intiat": 0, "onc": [0, 1, 2, 4, 5, 6, 8, 9, 10], "initi": [0, 5, 6, 8, 10], "peer": [0, 1, 4, 6, 8, 9], "identifyexampl": 0, "set_remote_identified_callback": [0, 6], "remote_identifi": 0, "origin": [0, 5, 8], "displai": [0, 8], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 6], "client_ident": 0, "sendig": 0, "perform": [0, 1, 4, 5, 8], "random_text_gener": 0, "request_id": [0, 6], "remote_ident": [0, 6], "requested_at": [0, 6], "look": [0, 1, 4, 8, 9], "On": [0, 1, 4, 9], "full": [0, 4, 6, 8, 9, 10], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 8, 9], "awai": [0, 4, 5, 8, 9], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 6], "response_gener": [0, 6], "allow": [0, 1, 2, 4, 5, 6, 8, 9, 10], "allow_al": [0, 6], "response_callback": [0, 6], "got_respons": 0, "failed_callback": [0, 6], "request_fail": 0, "request_receipt": [0, 6], "request_receiv": 0, "implement": [0, 4, 5, 6, 7, 8, 10], "file": [0, 1, 2, 4, 5, 6, 8, 9, 10], "download": [0, 4, 9], "resourc": [0, 1, 3, 6, 7], "effici": [0, 1, 4, 8, 10], "serv": [0, 2, 4, 5, 8, 9], "pleas": [0, 1, 4, 6, 9, 10], "note": [0, 1, 2, 4, 6, 8, 9], "larg": [0, 2, 4, 5, 6, 8, 10], "transfer": [0, 6, 8, 9, 10], "recommend": [0, 1, 2, 8], "compress": [0, 6, 8], "hashmap": 0, "sequenc": [0, 6, 8, 10], "long": [0, 1, 2, 4, 8], "slow": [0, 4, 8], "cpu": [0, 8], "probabl": [0, 5, 8, 9, 10], "result": [0, 8, 9], "befor": [0, 1, 4, 6, 8, 9], "complet": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prepar": [0, 5], "bundl": 0, "instead": [0, 1, 4, 8, 9], "slice": 0, "chunk": 0, "suitabl": [0, 1, 4, 5, 8, 10], "pack": 0, "thread": 0, "vendor": [0, 2], "umsgpack": 0, "app_timeout": 0, "45": [0, 8], "serve_path": 0, "here": [0, 1, 2, 4, 8, 9], "conveni": 0, "list_fil": 0, "entri": [0, 1, 8], "actual": [0, 1, 4, 8], "listdir": 0, "isfil": 0, "join": [0, 1, 5, 7, 8], "host": [0, 1, 4, 8, 9], "still": [0, 1, 2, 5, 8], "isdir": 0, "packb": 0, "fit": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 5], "mani": [0, 1, 2, 4, 5, 6, 8, 9, 10], "split": 0, "filelist": 0, "multipl": [0, 4, 5, 8, 9], "hint": 0, "alreadi": [0, 1, 2, 5, 6, 8, 9], "support": [0, 1, 3, 5, 8, 10], "after": [0, 4, 5, 6, 8, 9], "re": [0, 4, 6, 8], "keep": [0, 5, 6, 8, 9, 10], "open": [0, 2, 4, 5, 6, 7, 8, 9, 10], "client_request": 0, "longer": [0, 5, 8, 9], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 4], "don": [0, 1, 2, 5, 6, 9], "unknown": [0, 4, 6, 8], "conclud": [0, 6], "hasattr": 0, "avail": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server_fil": 0, "current": [0, 1, 2, 3, 4, 6, 8], "current_download": 0, "current_filenam": 0, "variabl": 0, "statist": [0, 4, 7], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 4, 6, 8, 9], "normal": [0, 4, 6], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 6], "set_resource_strategi": [0, 6], "accept_al": [0, 6], "set_resource_started_callback": [0, 6], "download_began": 0, "set_resource_concluded_callback": [0, 6], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 2, 4, 6], "request_packet": 0, "create_receipt": [0, 6], "print_menu": 0, "25": [0, 3, 10], "user_input": 0, "int": 0, "screen": 0, "variou": [0, 1, 4, 5, 8], "state": 0, "It": [0, 1, 2, 4, 6, 8, 9, 10], "uninterest": 0, "won": 0, "detail": [0, 1, 3, 4, 6, 9, 10], "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 6], "100": [0, 4, 8], "rprogress": 0, "save_error": 0, "could": [0, 1, 4, 5, 6, 8, 10], "disk": [0, 6], "hour": [0, 4], "rem": 0, "divmod": 0, "3600": [0, 4], "minut": [0, 1, 4, 8], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 8], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 3, 9], "suffix": 0, "b": [0, 5, 9], "ttransfer": 0, "press": 0, "index": [0, 1, 3], "enumer": 0, "filelist_data": 0, "unpack": 0, "extend": [0, 1, 6], "local": [0, 1, 4, 5, 6, 8, 9, 10], "unpackb": 0, "append": [0, 8], "visibl": 0, "updat": [0, 1, 6, 8], "small": [0, 4, 5, 8, 10], "job": 0, "potenti": [0, 4, 7, 8, 9], "target": [0, 4, 9], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 6, 10], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 6, 7, 8], "readabl": [0, 6, 8], "num": 0, "unit": [0, 1, 9], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 8], "pi": [0, 5, 8, 9, 10], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 1, 8, 9], "g": 0, "p": [0, 9], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 6, 8], "cl": 0, "nt": 0, "dir": 0, "best": [1, 8, 10], "depend": [1, 2, 5, 6, 8, 9], "guid": [1, 2, 8], "outlin": [1, 2, 8], "sensibl": [1, 2], "scenario": [1, 3, 8], "built": [1, 4, 8, 10], "few": [1, 2, 4, 5, 8, 9, 10], "other": [1, 2, 4, 5, 6, 8, 9], "even": [1, 2, 4, 5, 8, 9, 10], "extrem": [1, 8, 9, 10], "low": [1, 2, 4, 5, 8, 10], "bandwidth": [1, 4, 5, 6, 8, 10], "These": [1, 4, 8, 9], "feel": 1, "work": [1, 2, 4, 5, 8, 9, 10], "design": [1, 2, 5, 8, 10], "well": [1, 2, 4, 5, 6, 8, 10], "lora": [1, 2, 3, 8, 10], "wifi": [1, 3, 4, 5, 8, 9, 10], "wire": [1, 2, 3, 4, 10], "ethernet": [1, 2, 4, 5, 8, 10], "combin": [1, 3, 5, 8], "As": [1, 2, 4, 5, 6, 8, 10], "easi": [1, 2, 4, 8, 9, 10], "experi": [1, 8], "without": [1, 2, 5, 8, 10], "transceiv": [1, 2, 4, 8, 10], "infrastructur": [1, 2, 4, 5, 8, 9], "launch": [1, 9], "separ": [1, 4, 5, 8, 9], "devic": [1, 2, 3, 4, 5, 6, 8, 9], "same": [1, 2, 4, 5, 6, 8, 9], "enough": [1, 2, 8], "physic": [1, 2, 4, 8, 9], "termin": [1, 6], "suit": [1, 2, 8, 9], "featur": [1, 7, 8, 10], "both": [1, 2, 4, 5, 6, 8, 9, 10], "delai": [1, 4, 8, 9], "offlin": 1, "share": [1, 5, 6, 8, 9], "browser": 1, "page": [1, 3, 8], "dynam": [1, 9], "render": 1, "authent": [1, 4, 5, 6, 8, 9, 10], "more": [1, 2, 4, 5, 6, 8, 9, 10], "face": [1, 4], "protocol": [1, 2, 3, 4, 10], "lxmf": 1, "anoth": [1, 6, 8, 9], "project": 1, "instal": [1, 3, 4, 5, 8, 9, 10], "via": [1, 2, 4, 7, 8, 9, 10], "pip": [1, 2, 9], "pip3": [1, 2, 9], "nomadnet": 1, "veri": [1, 2, 4, 5, 6, 7, 8, 9, 10], "might": [1, 4, 5, 8, 9], "reboot": 1, "similar": [1, 2, 4, 5, 9, 10], "again": [1, 4, 8, 9], "would": [1, 4, 5, 6, 8], "rather": 1, "graphic": 1, "linux": [1, 8], "maco": 1, "earli": [1, 2], "stage": [1, 8], "interoper": [1, 2, 5, 8, 10], "come": [1, 8], "make": [1, 2, 4, 7, 8, 9], "easier": [1, 4, 5, 9], "manag": [1, 5, 6, 8, 9], "rnsd": [1, 3], "background": [1, 4], "foreground": 1, "servic": [1, 3, 5], "rnstatu": [1, 3, 4, 8], "rnpath": [1, 3, 4], "rnprobe": [1, 3], "view": [1, 4, 8, 9], "chapter": [1, 2, 4, 5, 6, 8, 9, 10], "locat": [1, 2, 5, 8, 9], "edit": [1, 9], "rnsconfig": 1, "broadcast": [1, 3, 4, 6, 8], "domain": [1, 4], "further": [1, 3, 4], "exampl": [1, 2, 3, 4, 6, 8, 9, 10], "tcp": [1, 2, 3, 5, 8, 10], "There": [1, 5, 8, 10], "subnet": [1, 5], "rout": [1, 4, 5, 6, 8, 9, 10], "tabl": [1, 4, 5, 8, 9], "thing": 1, "discov": [1, 4], "topographi": [1, 5, 8], "situat": [1, 2, 4, 5, 8], "where": [1, 2, 3, 4, 5, 6, 8, 9], "utilis": [1, 5, 6, 9, 10], "extern": [1, 4, 6, 10], "often": [1, 4, 5, 8, 9], "suffici": [1, 4, 8, 9], "act": [1, 6, 8, 9], "gatewai": [1, 4, 5, 8], "enabl": [1, 2, 4, 5, 6, 8, 9], "wider": [1, 4, 8, 9], "autointerfac": [1, 2, 4, 9], "possibli": 1, "offer": [1, 3, 4, 6, 8], "i2p": [1, 3, 10], "carefulli": 1, "tcpserverinterfac": [1, 4], "access": [1, 3, 4, 5, 6, 9], "ip": [1, 2, 4, 8, 9, 10], "faster": [1, 4, 8], "lower": [1, 4, 9], "latenc": [1, 8, 10], "energi": 1, "i2pinterfac": [1, 4], "howev": [1, 5, 8], "leak": 1, "reveal": [1, 6, 8, 10], "who": [1, 8], "inspect": [1, 4, 5, 8], "someon": [1, 4], "determin": [1, 6, 8], "adversari": 1, "mai": [1, 4, 6, 8, 9], "record": [1, 8], "metadata": 1, "like": [1, 2, 4, 5, 6, 8, 9, 10], "transmiss": [1, 4, 6, 8], "though": [1, 2, 4, 8], "publicli": 1, "most": [1, 2, 4, 5, 8, 9], "anymor": 1, "through": [1, 2, 4, 5, 6, 8, 9, 10], "invis": [1, 4], "daemon": [1, 4, 6, 9], "parallel": 1, "For": [1, 2, 4, 5, 6, 8, 10], "alwai": [1, 4, 6, 8, 9], "node": [1, 3, 4, 5, 9, 10], "i2pd": [1, 4], "mix": [1, 4, 5, 9], "hide": 1, "relai": 1, "extra": [1, 4, 5, 9], "comput": [1, 8, 10], "power": [1, 2, 4, 8], "attack": 1, "form": [1, 4, 5, 6, 8], "deep": 1, "much": [1, 4, 5, 8, 9], "difficult": [1, 2], "non": [1, 6, 8], "behind": [1, 8], "firewal": [1, 4], "nat": 1, "preserv": [1, 6], "anonym": [1, 5, 6, 8, 10], "care": [1, 2, 6, 10], "slightli": 1, "experiment": [1, 2, 10], "made": [1, 6, 8], "dublin": 1, "hub": [1, 4], "tcpclientinterfac": [1, 2, 4], "ye": [1, 4, 8, 9], "target_host": [1, 4], "target_port": [1, 4], "4965": [1, 9], "frankfurt": [1, 9], "5377": 1, "uxg5kubabakh3jtnvsipingbr5574dle7bubvip7llfvwx2tgrua": 1, "b32": [1, 4], "point": [1, 2, 4, 5, 8, 9], "absolut": [1, 2, 7, 10], "usag": [1, 3, 4, 6, 7, 9], "occasion": 1, "test": [1, 2, 8], "failur": [1, 4], "guarante": [1, 8], "compat": [1, 2, 4, 6, 8], "hardwar": [1, 3, 4, 5, 6, 8, 9, 10], "wide": [1, 2, 4, 8, 10], "section": [1, 2, 4, 5, 8, 9], "easili": [1, 4, 5, 8, 9, 10], "cheapli": 1, "rnode": [1, 3, 8, 9, 10], "purpos": [1, 2, 4, 6, 8], "digit": [1, 2, 8, 10], "integr": [1, 5, 8], "yourself": [1, 8, 10], "custom": [1, 4, 6, 8, 10], "firmwar": [1, 2, 8], "board": [1, 3, 8, 10], "auto": [1, 2, 3, 6, 8], "script": [1, 2], "prefer": [1, 8], "purchas": [1, 5, 8, 10], "supplier": [1, 3], "addit": [1, 2, 4, 8, 9, 10], "privat": [1, 4, 6, 7, 8, 10], "secur": [1, 8, 10], "uncensor": 1, "mesh": [1, 4, 5, 10], "think": 1, "welcom": 1, "head": 1, "discuss": [1, 2, 8], "propos": 1, "easiest": [1, 2, 4, 8], "releas": [1, 2, 4, 8], "abov": [1, 2, 4, 8, 9], "next": [1, 5, 6, 8], "step": [1, 2], "pyseri": 1, "netifac": 1, "api": [1, 3, 8, 10], "associ": [1, 6, 8], "case": [1, 2, 4, 5, 8, 9], "recip": 1, "cryptographi": [1, 8, 10], "clone": 1, "repositori": [1, 7, 8], "git": 1, "move": [1, 4, 8, 9], "folder": 1, "symlink": [1, 9], "librari": 1, "cd": 1, "ln": [1, 9], "python3": [1, 2], "echo": [1, 3, 9], "unless": [1, 4, 6, 8], "ve": 1, "immedi": [1, 4, 9], "necessari": [1, 2, 4, 5, 6, 8], "nano": 1, "repeat": 1, "process": [1, 2, 4, 6, 8], "h": [1, 9], "ping": [1, 9], "replac": [1, 8, 9], "below": [1, 2, 4, 9], "3e12fc71692f8ec47bc5": 1, "filetransf": [1, 3, 6], "understand": [1, 3, 6, 9], "architectur": 1, "precompil": 1, "dev": [1, 4, 9], "packag": [1, 4, 8], "sudo": [1, 9], "apt": 1, "relat": 1, "termux": 1, "f": 1, "droid": 1, "emul": 1, "environ": [1, 5, 8], "abil": [1, 2], "io": [1, 2, 9], "pre": [1, 2, 6, 8], "wheel": 1, "standard": [1, 2, 8], "sure": [1, 2, 9], "pkg": 1, "upgrad": [1, 8], "Then": 1, "essenti": [1, 4, 8], "openssl": [1, 8], "libffi": 1, "rust": 1, "platform": [1, 2, 8], "compil": 1, "export": 1, "cargo_build_target": 1, "aarch64": 1, "sever": [1, 5, 6, 9], "succe": 1, "softwar": [1, 2, 4, 8, 10], "possibl": [1, 2, 4, 5, 6, 8, 9, 10], "apk": 1, "tutori": 1, "code": [1, 2, 3, 4, 9], "rare": [1, 4], "obscur": 1, "unusu": 1, "rnspure": 1, "content": [1, 5, 9], "No": [1, 4, 8, 9, 10], "matter": [1, 4], "perfectli": 1, "serial": [1, 2, 3, 8, 10], "pyca": [1, 8], "cryptograph": [1, 3, 5, 10], "primit": [1, 3], "One": [2, 6], "truli": [2, 8], "valuabl": [2, 7], "almost": [2, 4, 8, 9], "conceiv": 2, "kind": [2, 4, 5, 8], "medium": [2, 4, 5, 6, 8, 10], "flexibl": [2, 4, 10], "cover": [2, 8, 10], "wireless": [2, 5], "decad": 2, "old": [2, 7, 8], "radio": [2, 3, 4, 5, 6, 8, 9, 10], "modem": [2, 4, 5, 6, 8, 10], "modern": [2, 8], "millimet": 2, "wave": 2, "backhaul": [2, 5], "oper": [2, 4, 5, 6, 8, 9, 10], "good": [2, 5, 8, 9], "chanc": 2, "box": 2, "glue": 2, "littl": [2, 8], "effort": 2, "pipeinterfac": [2, 4], "kiss": [2, 3, 9, 10], "simplyequip": 2, "broad": 2, "abund": 2, "sometim": 2, "especi": [2, 4], "scratch": 2, "real": [2, 5, 10], "world": [2, 5, 10], "minim": [2, 3, 8], "cost": [2, 8, 10], "fundament": [2, 8], "categori": 2, "emploi": [2, 8], "reliabl": [2, 4, 5, 8, 10], "commonli": 2, "either": [2, 4, 5, 8, 9], "expens": 2, "hard": 2, "hungri": 2, "attempt": [2, 6], "allevi": 2, "particular": 2, "plaform": 2, "its": [2, 4, 6, 8], "compon": [2, 7, 8], "frequenc": [2, 4, 8], "band": [2, 8], "scheme": 2, "limit": [2, 5, 8], "common": [2, 3, 5, 8, 9, 10], "ism": [2, 8], "avoid": [2, 8, 9], "confus": [2, 8], "layer": [2, 4, 5, 8, 10], "noth": [2, 10], "lorawan": [2, 8], "central": [2, 5, 8], "iot": 2, "raw": 2, "overhead": [2, 4, 8], "high": [2, 4, 8, 10], "level": [2, 4, 8, 9], "directli": [2, 4, 6, 8, 9, 10], "replic": [2, 8], "across": [2, 5], "togeth": [2, 8, 9], "tool": [2, 8, 9, 10], "exact": [2, 4, 8], "explain": [2, 6], "approach": [2, 8, 9], "develop": [2, 3, 6, 7, 8, 10], "boil": 2, "obtain": [2, 8], "autom": [2, 7, 8], "provis": 2, "rnodeinterfac": [2, 4, 9], "ic": 2, "semtech": 2, "sx1276": 2, "esp32": 2, "manufactur": 2, "avr": 2, "atmega1284p": 2, "rnodeconf": 2, "autoinstal": 2, "seri": 2, "question": [2, 4], "consid": [2, 6, 8, 10], "newest": [2, 8], "version": [2, 8, 9], "stabil": 2, "paramet": [2, 4, 5, 6, 8, 9], "port": [2, 3, 4, 5, 8, 10], "air": [2, 10], "id": [2, 4, 6, 8, 9], "itself": [2, 3, 8], "touch": [2, 10], "produc": 2, "short": [2, 8, 9], "fulli": [2, 8, 9, 10], "bridg": [2, 3], "behav": 2, "mean": [2, 4, 5, 8, 9], "link": [2, 3, 4, 5, 6, 9, 10], "dhcp": [2, 4, 9], "dn": 2, "least": [2, 4, 8, 9, 10], "transpar": [2, 4, 8, 9], "capac": [2, 4, 6, 8], "distanc": [2, 8], "ubiqu": 2, "airmax": 2, "ltu": 2, "mikrotik": 2, "exhaust": [2, 8], "rel": [2, 8, 10], "cheap": [2, 8], "co": [2, 4, 10], "concurr": [2, 8, 9], "pattern": [2, 8], "gain": [2, 6, 8], "antenna": 2, "backbon": 2, "area": [2, 4, 5, 8, 10], "aim": [3, 8], "particip": [3, 5, 8], "caveat": 3, "emptor": 3, "fast": [3, 4, 6, 8], "base": [3, 4, 5, 6, 8, 9, 10], "nomad": 3, "sideband": 3, "With": [3, 4, 5, 8, 9], "internet": [3, 4, 8, 10], "testnet": [3, 9], "arm64": 3, "android": 3, "pure": [3, 8], "python": [3, 8, 9, 10], "rncp": 3, "rnx": 3, "improv": [3, 4, 7], "fix": [3, 8], "motiv": 3, "goal": [3, 4], "introduct": 3, "announc": [3, 6, 9], "mechan": [3, 4], "reach": [3, 4, 5], "prioritis": [3, 4, 5, 6], "propag": [3, 4, 6], "rule": [3, 4], "udp": [3, 5, 8, 9, 10], "pipe": [3, 10], "ax": [3, 10], "concept": [3, 8, 9], "overview": [3, 4, 8], "interconnect": [3, 4, 8], "site": [3, 4], "growth": 3, "converg": [3, 8], "identif": [3, 4, 10], "request": [3, 4, 6, 8, 9], "respons": [3, 6, 8], "donat": 3, "contribut": 3, "requestreceipt": [3, 6], "search": 3, "distinct": [4, 8], "topologi": [4, 8], "less": [4, 8, 10], "endless": 4, "describ": [4, 6, 8], "give": [4, 8, 9], "respect": 4, "discover": 4, "autoconfigur": [4, 10], "ipv6": [4, 9], "router": [4, 9], "sort": [4, 8], "switch": [4, 8], "os": 4, "interface_en": [4, 9], "isol": [4, 9], "lan": 4, "group": [4, 6, 8], "group_id": 4, "kernel": [4, 9, 10], "wlan0": 4, "eth1": 4, "Or": [4, 9, 10], "ignor": [4, 6, 8], "ones": [4, 9], "ignored_devic": 4, "tun0": 4, "eth0": 4, "multicast": 4, "autodiscov": 4, "discoveri": [4, 8, 9], "scope": 4, "admin": 4, "organis": [4, 5, 7], "custom_network_nam": 4, "discovery_scop": 4, "discovery_port": 4, "48555": 4, "data_port": 4, "49555": 4, "frequent": 4, "block": 4, "inbound": [4, 6], "portabl": [4, 8], "persist": [4, 9], "achiev": [4, 6, 8], "geti2p": 4, "net": 4, "websit": 4, "base32": 4, "comma": 4, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 4, "output": [4, 9], "event": 4, "simplest": [4, 8], "tunnel": [4, 8, 10], "interchang": 4, "degre": 4, "retain": 4, "eas": [4, 8], "simpler": 4, "4242": 4, "listen_ip": 4, "listen_port": 4, "bind": 4, "10": [4, 8, 9], "88": 4, "i2p_tunnel": 4, "127": 4, "5001": 4, "dedic": [4, 8], "natur": 4, "toler": 4, "intermitt": 4, "gracefulli": 4, "restor": 4, "reappear": 4, "hostnam": 4, "expos": [4, 6], "soundmodem": 4, "kiss_fram": 4, "tnc": [4, 6, 9, 10], "8001": 4, "caution": 4, "frame": 4, "conjunct": 4, "never": [4, 6, 8], "disabl": [4, 8, 9], "intern": [4, 6, 8], "recoveri": 4, "greatli": 4, "unreli": 4, "implic": 4, "better": 4, "udpinterfac": 4, "forward_ip": 4, "255": 4, "forward_port": 4, "assum": [4, 8], "55": 4, "72": 4, "24": 4, "equival": 4, "forward": [4, 6, 8, 10], "segment": [4, 5, 6, 8, 10], "cours": [4, 8], "15": 4, "16": [4, 8, 9], "ttyusb0": [4, 9], "867": 4, "mhz": [4, 8], "867200000": 4, "125": 4, "khz": 4, "125000": 4, "tx": 4, "7": [4, 9], "mw": 4, "txpower": 4, "spread": 4, "factor": [4, 6], "12": 4, "being": [4, 6, 8], "fastest": [4, 8], "longest": 4, "spreadingfactor": 4, "throough": 4, "codingr": 4, "interv": [4, 6], "id_callsign": 4, "mycal": 4, "id_interv": 4, "600": 4, "homebrew": 4, "amount": [4, 5, 6, 8, 10], "ram": 4, "flow": [4, 5], "flow_control": 4, "pair": [4, 8], "laser": 4, "serialinterfac": 4, "baud": 4, "speed": [4, 8, 9], "115200": [4, 9], "databit": [4, 9], "pariti": [4, 9], "stopbit": [4, 9], "stdin": [4, 9], "virtual": [4, 5, 8, 9, 10], "netcat": 4, "l": [4, 9], "5757": 4, "respawn": 4, "respawn_delai": 4, "continu": [4, 7, 10], "scan": 4, "eof": 4, "respawn_interv": 4, "varieti": [4, 8, 9, 10], "openmodem": [4, 10], "period": [4, 6, 8], "beacon": 4, "station": 4, "kissinterfac": [4, 9], "ttyusb1": 4, "preambl": [4, 9], "150": [4, 9], "tail": 4, "txtail": [4, 9], "cdma": 4, "reason": [4, 8], "200": [4, 9], "slottim": [4, 9], "20": [4, 8, 9], "elaps": 4, "comment": [4, 9], "buffer": 4, "amateur": [4, 10], "spectrum": [4, 8], "encapsul": [4, 10], "callsign": 4, "ssid": 4, "realli": [4, 6], "doesn": 4, "anyth": [4, 8, 9, 10], "incur": 4, "ax25kissinterfac": 4, "no1cll": 4, "ttyusb2": 4, "150m": 4, "increas": [4, 9], "squelch": 4, "rx": 4, "turnaround": 4, "kept": [4, 5, 6, 8], "wast": 4, "airtim": 4, "behaviour": [4, 9], "bring": 4, "brought": [4, 9], "valu": [4, 6, 8], "access_point": 4, "shorthand": [4, 9], "ap": 4, "shorter": 4, "expiri": 4, "mostli": [4, 5, 8], "quiet": [4, 9], "momentarili": 4, "disappear": [4, 9], "network_nam": 4, "passphras": [4, 8], "alon": 4, "ifac_s": 4, "customis": 4, "carri": [4, 6, 8, 9], "512": [4, 6, 8], "bit": [4, 6, 8, 9, 10], "announce_cap": [4, 6], "maximum": [4, 6, 8], "alloc": [4, 6, 8, 9], "given": [4, 5, 6, 8, 9], "upkeep": 4, "cap": 4, "queue": [4, 8], "nearbi": 4, "ensur": [4, 6, 8], "overwhelm": [4, 6], "rapidli": 4, "spam": 4, "opposit": 4, "effect": 4, "excess": 4, "benefici": [4, 9], "balanc": 4, "necesarri": 4, "bitrat": 4, "report": [4, 7], "guess": 4, "per": [4, 6, 8, 10], "affect": 4, "strictli": [4, 8], "complex": [4, 8], "left": [4, 6, 8, 9], "gw": 4, "addition": [4, 8], "behalf": 4, "resid": 4, "requestor": 4, "resolv": 4, "chain": 4, "along": [4, 5, 6, 8], "boundari": 4, "remain": [4, 6, 8], "roam": 4, "mobil": [4, 8], "seen": [4, 8], "perspect": [4, 6, 8], "vehicl": 4, "equip": [4, 5, 8], "side": [4, 10], "expir": 4, "significantli": 4, "impact": [4, 8], "announce_rate_target": 4, "announce_rate_grac": 4, "announce_rate_penalti": 4, "basi": [4, 6, 8, 9, 10], "moder": 4, "violat": 4, "enforc": 4, "penalti": 4, "7200": 4, "annouce_cap": 4, "mention": [4, 8], "strategi": [4, 6], "decis": [4, 8], "slower": [4, 6, 8], "hop": [4, 5, 6, 8, 9, 10], "right": [4, 5], "tend": 4, "conserv": 4, "span": [4, 8], "seamlessli": 4, "knowledg": [5, 8], "tradit": [5, 8], "worri": 5, "coordin": [5, 6, 8, 10], "entir": [5, 6, 8, 9], "evolv": 5, "futur": [5, 8], "mind": [5, 10], "autonom": [5, 8], "terminologi": [5, 8], "rest": [5, 10], "billion": [5, 8], "larger": [5, 8], "higher": [5, 10], "issu": [5, 7], "discrimin": 5, "ephemer": [5, 6, 8, 10], "ellipt": [5, 6, 8, 10], "curv": [5, 6, 8, 10], "diffi": [5, 8, 10], "hellman": [5, 8, 10], "exchang": [5, 6, 8, 10], "curve25519": [5, 6, 8, 10], "throttl": 5, "thu": [5, 6, 8], "agnost": [5, 8], "equal": [5, 8], "keystor": 5, "degrad": 5, "term": [5, 8], "stationari": [5, 9], "candid": 5, "optim": 5, "intend": [5, 8], "trustless": [5, 8, 10], "leav": [5, 8], "free": [5, 7, 10], "unorganis": 5, "manner": 5, "properti": [5, 6], "far": [5, 8], "unexplor": 5, "dissolv": 5, "organ": 5, "restrict": 5, "legaci": 5, "unifi": 5, "underli": [5, 10], "carrier": [5, 10], "involv": 5, "hardlin": 5, "decid": [5, 6, 8], "illustr": [5, 8], "plan": [5, 8], "member": 5, "mainli": 5, "three": [5, 8], "hill": 5, "top": [5, 8], "chosen": [5, 8], "due": 5, "sight": 5, "becaus": [5, 8], "four": 5, "At": [5, 8], "raspberri": [5, 8, 9, 10], "usb": [5, 8, 9], "cabl": 5, "adapt": 5, "suppli": [5, 6, 8], "grow": 5, "place": [5, 8, 9], "core": [5, 8, 10], "those": [5, 8], "previous": [5, 6, 8], "d": [5, 9], "island": 5, "investig": 5, "dori": 5, "willing": 5, "she": 5, "her": 5, "home": 5, "newli": [5, 6, 8], "everyon": [5, 8], "vice": [5, 10], "versa": [5, 10], "vhf": [5, 8, 10], "outli": 5, "geograph": 5, "coverag": 5, "dai": 5, "find": [5, 8], "were": 5, "poorli": 5, "outlier": 5, "signatur": [6, 8, 10], "configdir": 6, "logdest": 6, "exactli": [6, 8], "independ": [6, 8, 10], "inter": 6, "soon": 6, "kill": [6, 8], "forcibli": [6, 9], "advantag": 6, "demand": 6, "mtu": [6, 8, 10], "500": [6, 8, 10], "adher": 6, "507": 6, "break": [6, 8, 10], "prerequisit": 6, "percentag": 6, "schedul": 6, "queu": [6, 9], "fewer": 6, "distant": 6, "smaller": 6, "eventu": 6, "drop": [6, 8, 9], "appli": [6, 8], "individu": [6, 8], "static": 6, "should_use_implicit_proof": 6, "explicit": 6, "implicit": [6, 8], "transport_en": 6, "create_kei": 6, "decrypt": [6, 8], "verif": [6, 8], "sign": [6, 8], "dh": 6, "keysiz": 6, "x25519": [6, 8, 10], "concaten": 6, "256": [6, 8], "128": [6, 8, 10], "constant": 6, "truncat": [6, 8], "recall_app_data": 6, "heard": [6, 8], "full_hash": 6, "sha": [6, 8], "truncated_hash": 6, "from_byt": 6, "prv_byte": 6, "save": [6, 8], "hazard": 6, "feed": 6, "from_fil": 6, "to_fil": 6, "Be": [6, 9], "otherwis": 6, "get_private_kei": 6, "get_public_kei": 6, "load_private_kei": 6, "load_public_kei": 6, "pub_byt": 6, "ciphertext": 6, "token": [6, 8], "keyerror": 6, "hold": [6, 8], "ciphertext_token": 6, "presenc": 6, "ingo": 6, "zero": [6, 10], "full_nam": [6, 9], "app_and_aspects_from_nam": 6, "tupl": 6, "hash_from_name_and_ident": 6, "path_respons": 6, "flag": [6, 8], "accepts_link": 6, "accept": [6, 7, 8, 9], "set_proof_requested_callback": 6, "proof_strategi": 6, "prove_non": 6, "prove_app": 6, "proof_requested_callback": 6, "allow_non": 6, "allowed_list": 6, "whatev": [6, 8], "funcion": 6, "allow_list": 6, "deregister_request_handl": 6, "deregist": 6, "symmetr": [6, 8], "typeerror": 6, "incompat": [6, 8], "set_default_app_data": 6, "callabl": 6, "clear_default_app_data": 6, "ae": [6, 8, 10], "deriv": [6, 8, 10], "secreci": [6, 8, 10], "payload": [6, 8], "instanti": 6, "encrypted_mdu": 6, "383": 6, "plain_mdu": 6, "464": 6, "resend": 6, "get_statu": 6, "cull": 6, "successful": 6, "proven": [6, 8], "established_callback": 6, "closed_callback": 6, "establishment_timeout_per_hop": 6, "keepalive_timeout_factor": 6, "4": [6, 8, 9], "calcul": [6, 8], "stale_grac": 6, "grace": 6, "keepal": [6, 8], "360": 6, "aliv": [6, 8], "stale_tim": 6, "720": 6, "mark": [6, 8], "stale": 6, "final": [6, 8], "torn": 6, "progress_callback": 6, "info": [6, 8, 9], "no_inbound_for": 6, "no_outbound_for": 6, "outbound": [6, 8], "inactive_for": 6, "purg": 6, "set_resource_callback": 6, "get_transfer_s": 6, "get_data_s": 6, "get_part": 6, "is_compress": 6, "begun": 6, "resource_strategi": 6, "accept_non": 6, "accept_app": 6, "resource_callback": 6, "unsupport": 6, "get_request_id": 6, "get_respons": 6, "get_response_tim": 6, "auto_compress": 6, "arbitrari": [6, 8, 9, 10], "checksum": [6, 10], "Will": 6, "whenev": [6, 8], "cancel": 6, "total": [6, 8, 10], "get_seg": 6, "divid": 6, "get_hash": 6, "pathfinder_m": 6, "object": 6, "attribut": 6, "deregister_announce_handl": 6, "hops_to": 6, "next_hop": 6, "next_hop_interfac": 6, "on_interfac": 6, "tag": 6, "recurs": 6, "gratefulli": 7, "monero": 7, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 7, "ethereum": 7, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 7, "bitcoin": 7, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 7, "ko": 7, "fi": 7, "roadmap": 7, "realiti": 7, "quickli": [7, 8, 10], "sponsor": [7, 10], "dysfunct": 7, "analyt": 7, "telemetri": 7, "collect": 7, "under": [7, 9], "circumst": [7, 8], "reli": [7, 8], "fashion": 7, "u": [7, 8], "suggest": 7, "briefli": 8, "overal": 8, "principl": [8, 10], "author": 8, "That": 8, "said": 8, "document": 8, "pretti": 8, "sentiment": 8, "philosophi": 8, "problem": 8, "seek": 8, "solv": 8, "solut": 8, "primari": 8, "lack": 8, "my": 8, "belief": 8, "highli": 8, "peopl": 8, "machin": 8, "censorship": 8, "barrier": 8, "todai": 8, "centralis": 8, "trust": 8, "approv": 8, "gatekeep": 8, "inevit": 8, "lead": 8, "govern": 8, "alter": 8, "censor": 8, "persecut": 8, "unwant": 8, "actor": 8, "imposs": 8, "freeli": 8, "deploi": 8, "enhanc": 8, "agenc": 8, "freedom": 8, "permissionless": 8, "pick": 8, "ghz": 8, "off": [8, 10], "shelf": [8, 10], "ultim": 8, "vast": 8, "myriad": 8, "thousand": 8, "surveil": 8, "disassoci": 8, "oversight": 8, "beings": 8, "usabl": 8, "useabl": 8, "critic": [8, 9], "agnostic": 8, "shall": 8, "handheld": 8, "stream": 8, "modifi": [8, 9], "interest": 8, "strong": 8, "oneself": 8, "unlicens": 8, "licens": 8, "condit": 8, "pmr": 8, "cb": 8, "wish": [8, 9], "written": 8, "programm": 8, "orient": 8, "multipoint": 8, "recipi": 8, "idea": [8, 9], "singular": 8, "_represented_": 8, "characterist": 8, "13425ec15b621c1d928589718000d814": 8, "trade": 8, "accommod": 8, "simultan": 8, "unlik": 8, "nears": 8, "congest": 8, "galact": 8, "scale": 8, "obvious": 8, "ridicul": 8, "multi": [8, 9, 10], "special": [8, 9], "uniqu": [8, 10], "ecdh": [8, 10], "creator": 8, "correspond": 8, "possess": 8, "although": [8, 10], "abstract": 8, "capabl": 8, "dot": [8, 9], "notat": [8, 9], "repres": 8, "plenti": 8, "environment": 8, "monitor": 8, "measur": 8, "environmentlogg": 8, "remotesensor": 8, "temperatur": 8, "4faf1b2e0a077e6a9d92fa051f256038": 8, "advis": 8, "expand": 8, "structur": 8, "recap": 8, "indirectli": 8, "awar": 8, "ledger": 8, "therefor": [8, 10], "definit": 8, "messeng": 8, "nicknam": 8, "ed25519": [8, 10], "reconstruct": 8, "notic": [8, 9], "piec": 8, "intention": 8, "infer": 8, "throughout": 8, "accord": 8, "around": 8, "assign": [8, 9], "topic": 8, "necessarili": 8, "person": 8, "entiti": 8, "robot": 8, "sensor": 8, "someth": 8, "agent": 8, "manipul": 8, "multilater": 8, "creation": 8, "great": 8, "suffic": 8, "cluster": 8, "hear": 8, "But": 8, "introduc": 8, "lot": 8, "surviv": 8, "overcom": 8, "challeng": 8, "asymmetr": [8, 10], "closer": 8, "distinguish": 8, "contend": 8, "enable_transport": [8, 9], "retransmit": 8, "randomis": 8, "prioriti": 8, "invers": 8, "proport": 8, "count": 8, "insert": 8, "closest": 8, "greater": 8, "retri": 8, "newer": 8, "discard": 8, "contact": 8, "shortest": 8, "predict": 8, "constantli": 8, "earlier": 8, "opt": 8, "against": 8, "neither": 8, "session": 8, "bidirect": 8, "travers": 8, "rememb": 8, "subsequ": 8, "ten": 8, "advanc": 8, "confirm": [8, 10], "insid": 8, "intermediari": 8, "moment": [8, 10], "methodologi": [8, 9], "answer": [8, 9], "malici": 8, "pretend": 8, "recreat": 8, "rotat": 8, "procedur": 8, "memori": 8, "thereaft": 8, "297": [8, 10], "practic": [8, 10], "neglig": 8, "1200": 8, "96": 8, "keypair": 8, "simplic": 8, "explan": [8, 9], "lki": 8, "laid": 8, "had": 8, "construct": 8, "lkr": 8, "chose": 8, "bi": 8, "direction": 8, "unequivoc": 8, "retransmiss": 8, "reassembl": 8, "programmat": 8, "satisfi": 8, "half": [8, 10], "duplex": [8, 10], "averag": 8, "throughput": [8, 10], "x": [8, 9], "runtim": 8, "consist": 8, "whereupon": 8, "stabl": [8, 10], "maintain": 8, "year": 8, "microcontrol": 8, "430": 8, "868": 8, "900": 8, "debian": [8, 9], "recent": 8, "mac": 8, "tailor": 8, "treat": 8, "regard": 8, "preshar": 8, "ifac": [8, 9], "onto": 8, "compos": 8, "field": 8, "header": 8, "32": 8, "context": 8, "465": 8, "vari": [8, 9], "64": [8, 9], "00": [8, 9], "01": 8, "reserv": 8, "11": 8, "_______": 8, "________________": 8, "________": 8, "______": 8, "__": 8, "_": 8, "01010000": 8, "00000100": 8, "hash1": 8, "hash2": 8, "header_2": 8, "00000000": 8, "00000111": 8, "header_1": 8, "10000000": 8, "exclud": 8, "51": 8, "157": 8, "83": [8, 9], "115": 8, "99": 8, "conceptu": 8, "x22519": 8, "hkdf": 8, "fernet": [8, 10], "cbc": [8, 10], "hmac": [8, 10], "hashlib": 8, "pkcs7": [8, 10], "pad": [8, 10], "trivial": [8, 10], "consequ": 8, "backend": 8, "loss": 8, "scrutini": 8, "review": [8, 10], "risk": 8, "pose": 8, "driver": [9, 10], "privileg": 9, "light": 9, "weight": 9, "boot": 9, "verbos": 9, "exampleconfig": 9, "ie": 9, "remov": 9, "breviti": 9, "socket": 9, "turn": 9, "share_inst": 9, "shared_instance_port": 9, "37428": 9, "instance_control_port": 9, "37429": 9, "panic": 9, "unrecover": 9, "occur": [9, 10], "panic_on_interface_error": 9, "warn": 9, "6": 9, "debug": 9, "unus": 9, "order": 9, "teach": 9, "task": 9, "v": 9, "show": 9, "ifconfig": 9, "gbp": 9, "13": 9, "kb": 9, "86": 9, "mbp": 9, "63": 9, "23": 9, "80": 9, "17": 9, "tcpinterfac": 9, "unsign": 9, "187": 9, "27": 9, "74": 9, "uhf": [9, 10], "30": 9, "kbp": 9, "e702c42ba8": 9, "49": 9, "9": 9, "5245a8efe1788c6a1cd36144a270e13b": 9, "c89b4da064bf66d280f0e4d8abfd9806": 9, "f53a1c4278e0726bb73fcc623d6ce763": 9, "reticulu": 9, "w": 9, "posit": 9, "probe": 9, "2d03725b327348980d570f739a3a5708": 9, "38": 9, "469": 9, "1726dbad538775b5bf9b0ea25a4079c8": 9, "c50cc4e4f7838b6c31f60ab9032cbc62": 9, "copi": 9, "tgz": 9, "73cbd378bb0286ed11a707c13447bb1": 9, "allowed_hash": 9, "decreas": 9, "auth": 9, "941bed5e228775e5a8079fc38b1ccf3f": 9, "1b03013c25f1c2ca068a4f080b844a10": 9, "7a55144adf826958a9529a3bcf08b149": 9, "cat": 9, "proc": 9, "cpuinfo": 9, "pseudo": 9, "shell": 9, "stderr": 9, "noauth": 9, "noid": 9, "mirror": 9, "max": 9, "perman": 9, "administr": 9, "ubuntu": 9, "ftdi_ft230x_basic_uart_43891ckm": 9, "if00": 9, "port0": 9, "plug": 9, "unplug": 9, "systemd": 9, "usr": 9, "bin": 9, "etc": 9, "execstartpr": 9, "restart": 9, "restartsec": 9, "usernameher": 9, "execstart": 9, "wantedbi": 9, "systemctl": 9, "readili": 10, "unforg": 10, "acknowledg": 10, "resili": 10, "userland": 10, "beta": 10, "bug": 10, "warrant": 10, "sha256": 10, "iv": 10, "urandom": 10, "intuit": 10, "friendli": 10, "44": 10, "gigabyt": 10, "scalabl": 10, "hoc": 10, "optic": 10, "transform": 10, "stop": 10, "fact": 10, "strength": 10, "generalis": 10, "fibr": 10, "popular": 10, "ideal": 10, "stdio": 10, "hack": 10, "foremost": 10, "audit": 10, "privaci": 10, "thorough": 10, "research": 10}, "objects": {"RNS": [[6, 0, 1, "", "Destination"], [6, 0, 1, "", "Identity"], [6, 0, 1, "", "Link"], [6, 0, 1, "", "Packet"], [6, 0, 1, "", "PacketReceipt"], [6, 0, 1, "", "RequestReceipt"], [6, 0, 1, "", "Resource"], [6, 0, 1, "", "Reticulum"], [6, 0, 1, "", "Transport"]], "RNS.Destination": [[6, 1, 1, "", "accepts_links"], [6, 1, 1, "", "announce"], [6, 1, 1, "", "app_and_aspects_from_name"], [6, 1, 1, "", "clear_default_app_data"], [6, 1, 1, "", "create_keys"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "deregister_request_handler"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "full_name"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "hash"], [6, 1, 1, "", "hash_from_name_and_identity"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "register_request_handler"], [6, 1, 1, "", "set_default_app_data"], [6, 1, 1, "", "set_link_established_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_proof_requested_callback"], [6, 1, 1, "", "set_proof_strategy"], [6, 1, 1, "", "sign"]], "RNS.Identity": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "KEYSIZE"], [6, 2, 1, "", "TRUNCATED_HASHLENGTH"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "from_bytes"], [6, 1, 1, "", "from_file"], [6, 1, 1, "", "full_hash"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "get_public_key"], [6, 1, 1, "", "get_random_hash"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "load_public_key"], [6, 1, 1, "", "recall"], [6, 1, 1, "", "recall_app_data"], [6, 1, 1, "", "sign"], [6, 1, 1, "", "to_file"], [6, 1, 1, "", "truncated_hash"], [6, 1, 1, "", "validate"]], "RNS.Link": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [6, 2, 1, "", "KEEPALIVE"], [6, 2, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [6, 2, 1, "", "STALE_GRACE"], [6, 2, 1, "", "STALE_TIME"], [6, 1, 1, "", "get_remote_identity"], [6, 1, 1, "", "identify"], [6, 1, 1, "", "inactive_for"], [6, 1, 1, "", "no_inbound_for"], [6, 1, 1, "", "no_outbound_for"], [6, 1, 1, "", "request"], [6, 1, 1, "", "set_link_closed_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_remote_identified_callback"], [6, 1, 1, "", "set_resource_callback"], [6, 1, 1, "", "set_resource_concluded_callback"], [6, 1, 1, "", "set_resource_started_callback"], [6, 1, 1, "", "set_resource_strategy"], [6, 1, 1, "", "teardown"]], "RNS.Packet": [[6, 2, 1, "", "ENCRYPTED_MDU"], [6, 2, 1, "", "PLAIN_MDU"], [6, 1, 1, "", "resend"], [6, 1, 1, "", "send"]], "RNS.PacketReceipt": [[6, 1, 1, "", "get_rtt"], [6, 1, 1, "", "get_status"], [6, 1, 1, "", "set_delivery_callback"], [6, 1, 1, "", "set_timeout"], [6, 1, 1, "", "set_timeout_callback"]], "RNS.RequestReceipt": [[6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_request_id"], [6, 1, 1, "", "get_response"], [6, 1, 1, "", "get_response_time"], [6, 1, 1, "", "get_status"]], "RNS.Resource": [[6, 1, 1, "", "advertise"], [6, 1, 1, "", "cancel"], [6, 1, 1, "", "get_data_size"], [6, 1, 1, "", "get_hash"], [6, 1, 1, "", "get_parts"], [6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_segments"], [6, 1, 1, "", "get_transfer_size"], [6, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[6, 2, 1, "", "ANNOUNCE_CAP"], [6, 2, 1, "", "MTU"], [6, 1, 1, "", "should_use_implicit_proof"], [6, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[6, 2, 1, "", "PATHFINDER_M"], [6, 1, 1, "", "deregister_announce_handler"], [6, 1, 1, "", "has_path"], [6, 1, 1, "", "hops_to"], [6, 1, 1, "", "next_hop"], [6, 1, 1, "", "next_hop_interface"], [6, 1, 1, "", "register_announce_handler"], [6, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 7, 8], "exampl": [0, 5], "minim": 0, "announc": [0, 4, 8], "broadcast": 0, "echo": 0, "link": [0, 8], "identif": 0, "request": 0, "respons": 0, "filetransf": 0, "get": [1, 8], "start": 1, "fast": 1, "try": 1, "us": [1, 9, 10], "reticulum": [1, 2, 3, 7, 8, 9, 10], "base": [1, 2], "program": [1, 9], "nomad": 1, "network": [1, 3, 5], "sideband": 1, "includ": [1, 9], "util": [1, 9], "creat": [1, 2], "With": 1, "connect": 1, "instanc": 1, "over": [1, 5], "internet": [1, 5], "public": [1, 8], "testnet": 1, "ad": 1, "radio": 1, "interfac": [1, 4, 8, 10], "develop": 1, "particip": 1, "arm64": 1, "android": 1, "pure": 1, "python": 1, "commun": 2, "hardwar": 2, "rnode": [2, 4], "support": [2, 4, 7], "board": 2, "lilygo": 2, "lora32": 2, "v2": 2, "1": 2, "0": 2, "t": 2, "beam": 2, "heltec": 2, "unsign": 2, "x": 2, "v1": 2, "instal": 2, "usag": 2, "supplier": 2, "wifi": 2, "combin": 2, "type": [2, 8, 10], "stack": 3, "manual": 3, "tabl": 3, "Of": 3, "content": 3, "indic": 3, "auto": 4, "i2p": 4, "tcp": 4, "server": 4, "client": 4, "udp": 4, "lora": [4, 5], "serial": [4, 9], "pipe": 4, "kiss": 4, "ax": 4, "25": 4, "common": 4, "option": 4, "mode": 4, "rate": 4, "control": 4, "build": 5, "concept": 5, "overview": 5, "scenario": 5, "interconnect": 5, "site": 5, "bridg": 5, "growth": 5, "converg": 5, "api": 6, "refer": [6, 8], "donat": 7, "provid": 7, "feedback": 7, "contribut": 7, "understand": 8, "motiv": 8, "goal": 8, "introduct": 8, "basic": 8, "function": 8, "destin": 8, "name": [8, 9], "kei": 8, "ident": 8, "further": 8, "transport": 8, "node": 8, "The": [8, 9], "mechan": 8, "detail": 8, "reach": 8, "establish": 8, "resourc": 8, "setup": 8, "protocol": 8, "specif": 8, "packet": 8, "prioritis": 8, "access": 8, "wire": 8, "format": 8, "propag": 8, "rule": 8, "cryptograph": 8, "primit": 8, "your": 9, "system": 9, "configur": 9, "data": 9, "rnsd": 9, "rnstatu": 9, "rnpath": 9, "rnprobe": 9, "rncp": 9, "rnx": 9, "improv": 9, "fix": 9, "port": 9, "servic": 9, "what": 10, "i": 10, "current": 10, "statu": 10, "doe": 10, "offer": 10, "where": 10, "can": 10, "devic": 10, "caveat": 10, "emptor": 10}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Communications Hardware": [[2, "communications-hardware"]], "RNode": [[2, "rnode"]], "Creating RNodes": [[2, "creating-rnodes"]], "Supported Boards": [[2, "supported-boards"]], "LilyGO LoRa32 v2.1": [[2, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[2, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[2, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[2, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[2, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[2, "unsigned-rnode-v1-x"]], "Installation": [[2, "installation"]], "Usage with Reticulum": [[2, "usage-with-reticulum"]], "Suppliers": [[2, "suppliers"]], "WiFi-based Hardware": [[2, "wifi-based-hardware"]], "Combining Hardware Types": [[2, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[3, "reticulum-network-stack-manual"]], "Table Of Contents": [[3, "table-of-contents"]], "Indices and Tables": [[3, "indices-and-tables"]], "Supported Interfaces": [[4, "supported-interfaces"]], "Auto Interface": [[4, "auto-interface"]], "I2P Interface": [[4, "i2p-interface"]], "TCP Server Interface": [[4, "tcp-server-interface"]], "TCP Client Interface": [[4, "tcp-client-interface"]], "UDP Interface": [[4, "udp-interface"]], "RNode LoRa Interface": [[4, "rnode-lora-interface"]], "Serial Interface": [[4, "serial-interface"]], "Pipe Interface": [[4, "pipe-interface"]], "KISS Interface": [[4, "kiss-interface"]], "AX.25 KISS Interface": [[4, "ax-25-kiss-interface"]], "Common Interface Options": [[4, "common-interface-options"]], "Interface Modes": [[4, "interface-modes"]], "Announce Rate Control": [[4, "announce-rate-control"]], "Support Reticulum": [[7, "support-reticulum"]], "Donations": [[7, "donations"]], "Provide Feedback": [[7, "provide-feedback"]], "Contribute Code": [[7, "contribute-code"]], "Understanding Reticulum": [[8, "understanding-reticulum"]], "Motivation": [[8, "motivation"]], "Goals": [[8, "goals"]], "Introduction & Basic Functionality": [[8, "introduction-basic-functionality"]], "Destinations": [[8, "destinations"]], "Destination Naming": [[8, "destination-naming"]], "Public Key Announcements": [[8, "public-key-announcements"]], "Identities": [[8, "understanding-identities"]], "Getting Further": [[8, "getting-further"]], "Reticulum Transport": [[8, "reticulum-transport"]], "Node Types": [[8, "node-types"]], "The Announce Mechanism in Detail": [[8, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[8, "reaching-the-destination"]], "Link Establishment in Detail": [[8, "link-establishment-in-detail"]], "Resources": [[8, "resources"]], "Reference Setup": [[8, "reference-setup"]], "Protocol Specifics": [[8, "protocol-specifics"]], "Packet Prioritisation": [[8, "packet-prioritisation"]], "Interface Access Codes": [[8, "interface-access-codes"]], "Wire Format": [[8, "wire-format"]], "Announce Propagation Rules": [[8, "announce-propagation-rules"]], "Cryptographic Primitives": [[8, "cryptographic-primitives"]], "What is Reticulum?": [[10, "what-is-reticulum"]], "Current Status": [[10, "current-status"]], "What does Reticulum Offer?": [[10, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[10, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[10, "interface-types-and-devices"]], "Caveat Emptor": [[10, "caveat-emptor"]], "Getting Started Fast": [[1, "getting-started-fast"]], "Try Using a Reticulum-based Program": [[1, "try-using-a-reticulum-based-program"]], "Nomad Network": [[1, "nomad-network"]], "Sideband": [[1, "sideband"]], "Using the Included Utilities": [[1, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[1, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[1, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[1, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[1, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[1, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[1, "participate-in-reticulum-development"]], "Reticulum on ARM64": [[1, "reticulum-on-arm64"]], "Reticulum on Android": [[1, "reticulum-on-android"]], "Pure-Python Reticulum": [[1, "pure-python-reticulum"]], "Building Networks": [[5, "building-networks"]], "Concepts & Overview": [[5, "concepts-overview"]], "Example Scenarios": [[5, "example-scenarios"]], "Interconnected LoRa Sites": [[5, "interconnected-lora-sites"]], "Bridging Over the Internet": [[5, "bridging-over-the-internet"]], "Growth and Convergence": [[5, "growth-and-convergence"]], "API Reference": [[6, "api-reference"]], "Using Reticulum on Your System": [[9, "using-reticulum-on-your-system"]], "Configuration & Data": [[9, "configuration-data"]], "Included Utility Programs": [[9, "included-utility-programs"]], "The rnsd Utility": [[9, "the-rnsd-utility"]], "The rnstatus Utility": [[9, "the-rnstatus-utility"]], "The rnpath Utility": [[9, "the-rnpath-utility"]], "The rnprobe Utility": [[9, "the-rnprobe-utility"]], "The rncp Utility": [[9, "the-rncp-utility"]], "The rnx Utility": [[9, "the-rnx-utility"]], "Improving System Configuration": [[9, "improving-system-configuration"]], "Fixed Serial Port Names": [[9, "fixed-serial-port-names"]], "Reticulum as a System Service": [[9, "reticulum-as-a-system-service"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/manual/using.html b/docs/manual/using.html index 7a03860..64dd2da 100644 --- a/docs/manual/using.html +++ b/docs/manual/using.html @@ -226,9 +226,10 @@

Reticulum is not installed as a driver or kernel module, as one might expect of a networking stack. Instead, Reticulum is distributed as a Python module. This means that no special privileges are required to install or use it. It -is also very light-weight, and easy to transfer to and install on new systems. -Any program or application that uses Reticulum will automatically load and -initialise Reticulum when it starts.

+is also very light-weight, and easy to transfer to, and install on new systems.

+

When you have Reticulum installed, any program or application that uses Reticulum +will automatically load and initialise Reticulum when it starts, if it is not +already running.

In many cases, this approach is sufficient. When any program needs to use Reticulum, it is loaded, initialised, interfaces are brought up, and the program can now communicate over any Reticulum networks available. If another @@ -238,18 +239,28 @@ concurrently, and is very easy to use, but depending on your use case, there are other options.

Configuration & Data#

-

A Reticulum stores all information that it needs to function in a single file- -system directory. By default, this directory is ~/.config/reticulum, but you can -use any directory you wish. You can also run multiple separate Reticulum -instances on the same physical system, in complete isolation from each other, -or connected together.

+

Reticulum stores all information that it needs to function in a single file-system +directory. When Reticulum is started, it will look for a valid configuration +directory in the following places:

+
    +
  • /etc/reticulum

  • +
  • ~/.config/reticulum

  • +
  • ~/.reticulum

  • +
+

If no existing configuration directory is found, the directory ~/.reticulum +is created, and the default configuration will be automatically created here. +You can move it to one of the other locations if you wish.

+

It is also possible to use completely arbitrary configuration directories by +specifying the relevant command-line parameters when running Reticulum-based +programs. You can also run multiple separate Reticulum instances on the same +physical system, either in isolation from each other, or connected together.

In most cases, a single physical system will only need to run one Reticulum instance. This can either be launched at boot, as a system service, or simply be brought up when a program needs it. In either case, any number of programs running on the same system will automatically share the same Reticulum instance, if the configuration allows for it, which it does by default.

-

The entire configuration of Reticulum is found in the ~/.config/reticulum/config -file. When Reticulum is first started on a new system, a basic, functional +

The entire configuration of Reticulum is found in the ~/.reticulum/config +file. When Reticulum is first started on a new system, a basic, but fully functional configuration file is created. The default configuration looks like this:

# This is the default Reticulum config file.
 # You should probably edit it to include any additional,
@@ -554,7 +565,7 @@ rnx 7a55144adf826958a9529a3bcf08b149 "cat /proc/cpuinfo"
 rnx 7a55144adf826958a9529a3bcf08b149 -x
 
 # The default identity file is stored in
-# ~/.config/reticulum/identities/rnx, but you can use
+# ~/.reticulum/identities/rnx, but you can use
 # another one, which will be created if it does
 # not already exist
 rnx 7a55144adf826958a9529a3bcf08b149 -i /path/to/identity -x
diff --git a/docs/source/gettingstartedfast.rst b/docs/source/gettingstartedfast.rst
index 6bbcf5f..b13e02b 100644
--- a/docs/source/gettingstartedfast.rst
+++ b/docs/source/gettingstartedfast.rst
@@ -86,7 +86,7 @@ Creating a Network With Reticulum
 =============================================
 To create a network, you will need to specify one or more *interfaces* for
 Reticulum to use. This is done in the Reticulum configuration file, which by
-default is located at ``~/.config/reticulum/config``. You can edit this file by hand,
+default is located at ``~/.reticulum/config``. You can edit this file by hand,
 or use the interactive ``rnsconfig`` utility. 
 
 When Reticulum is started for the first time, it will create a default
@@ -261,7 +261,7 @@ don't use pip, but try this recipe:
 
     # Unless you've manually created a config file, Reticulum will do so now,
     # and immediately exit. Make any necessary changes to the file:
-    nano ~/.config/reticulum/config
+    nano ~/.reticulum/config
 
     # ... and launch the example again.
     python3 Examples/Echo.py -s
diff --git a/docs/source/networks.rst b/docs/source/networks.rst
index 5c9a049..f818771 100644
--- a/docs/source/networks.rst
+++ b/docs/source/networks.rst
@@ -82,7 +82,7 @@ communications channels as the underlying carrier for Reticulum.
 However, most real-world networks will probably involve either some form of
 wireless or direct hardline communications. To allow Reticulum to communicate
 over any type of medium, you must specify it in the configuration file, by default
-located at ``~/.config/reticulum/config``. See the :ref:`Supported Interfaces`
+located at ``~/.reticulum/config``. See the :ref:`Supported Interfaces`
 chapter of this manual for interface configuration examples.
 
 Any number of interfaces can be configured, and Reticulum will automatically
diff --git a/docs/source/using.rst b/docs/source/using.rst
index 71d11c6..76673c0 100644
--- a/docs/source/using.rst
+++ b/docs/source/using.rst
@@ -7,9 +7,11 @@ Using Reticulum on Your System
 Reticulum is not installed as a driver or kernel module, as one might expect
 of a networking stack. Instead, Reticulum is distributed as a Python module.
 This means that no special privileges are required to install or use it. It
-is also very light-weight, and easy to transfer to and install on new systems.
-Any program or application that uses Reticulum will automatically load and
-initialise Reticulum when it starts.
+is also very light-weight, and easy to transfer to, and install on new systems.
+
+When you have Reticulum installed, any program or application that uses Reticulum
+will automatically load and initialise Reticulum when it starts, if it is not
+already running.
 
 In many cases, this approach is sufficient. When any program needs to use
 Reticulum, it is loaded, initialised, interfaces are brought up, and the
@@ -22,11 +24,22 @@ are other options.
 Configuration & Data
 --------------------
 
-A Reticulum stores all information that it needs to function in a single file-
-system directory. By default, this directory is ``~/.config/reticulum``, but you can
-use any directory you wish. You can also run multiple separate Reticulum
-instances on the same physical system, in complete isolation from each other,
-or connected together.
+Reticulum stores all information that it needs to function in a single file-system
+directory. When Reticulum is started, it will look for a valid configuration
+directory in the following places:
+
+- ``/etc/reticulum``
+- ``~/.config/reticulum``
+- ``~/.reticulum``
+
+If no existing configuration directory is found, the directory ``~/.reticulum``
+is created, and the default configuration will be automatically created here.
+You can move it to one of the other locations if you wish.
+
+It is also possible to use completely arbitrary configuration directories by
+specifying the relevant command-line parameters when running Reticulum-based
+programs. You can also run multiple separate Reticulum instances on the same
+physical system, either in isolation from each other, or connected together.
 
 In most cases, a single physical system will only need to run one Reticulum
 instance. This can either be launched at boot, as a system service, or simply
@@ -34,8 +47,8 @@ be brought up when a program needs it. In either case, any number of programs
 running on the same system will automatically share the same Reticulum instance,
 if the configuration allows for it, which it does by default.
 
-The entire configuration of Reticulum is found in the ``~/.config/reticulum/config``
-file. When Reticulum is first started on a new system, a basic, functional
+The entire configuration of Reticulum is found in the ``~/.reticulum/config``
+file. When Reticulum is first started on a new system, a basic, but fully functional
 configuration file is created. The default configuration looks like this:
 
 .. code::
@@ -371,7 +384,7 @@ output.
   rnx 7a55144adf826958a9529a3bcf08b149 -x
 
   # The default identity file is stored in
-  # ~/.config/reticulum/identities/rnx, but you can use
+  # ~/.reticulum/identities/rnx, but you can use
   # another one, which will be created if it does
   # not already exist
   rnx 7a55144adf826958a9529a3bcf08b149 -i /path/to/identity -x