From 3684fe502fb3ef131a838b236fc1634187e5e927 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 7 Apr 2022 18:59:42 +0200 Subject: [PATCH] Updated documentation --- docs/manual/.buildinfo | 2 +- docs/manual/_images/sideband_1.png | Bin 0 -> 80971 bytes .../_sources/gettingstartedfast.rst.txt | 65 +++++++++++++----- docs/manual/_sources/understanding.rst.txt | 57 ++++++++------- docs/manual/_static/documentation_options.js | 2 +- docs/manual/examples.html | 6 +- docs/manual/genindex.html | 6 +- docs/manual/gettingstartedfast.html | 65 +++++++++++++----- docs/manual/index.html | 11 +-- docs/manual/interfaces.html | 6 +- docs/manual/networks.html | 6 +- docs/manual/objects.inv | Bin 1856 -> 1870 bytes docs/manual/reference.html | 6 +- docs/manual/search.html | 6 +- docs/manual/searchindex.js | 2 +- docs/manual/understanding.html | 50 ++++++++------ docs/manual/using.html | 6 +- docs/manual/whatis.html | 6 +- docs/source/conf.py | 2 +- docs/source/gettingstartedfast.rst | 65 +++++++++++++----- docs/source/screenshots/sideband_1.png | Bin 0 -> 80971 bytes docs/source/understanding.rst | 57 ++++++++------- 22 files changed, 274 insertions(+), 152 deletions(-) create mode 100644 docs/manual/_images/sideband_1.png create mode 100644 docs/source/screenshots/sideband_1.png diff --git a/docs/manual/.buildinfo b/docs/manual/.buildinfo index ffc96b0..848b7ea 100644 --- a/docs/manual/.buildinfo +++ b/docs/manual/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 8cd01657672a2b3a4d1c8ecc92b32a11 +config: 8680566a0b6de7e728db125ddf2d6a25 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/manual/_images/sideband_1.png b/docs/manual/_images/sideband_1.png new file mode 100644 index 0000000000000000000000000000000000000000..89c0f17f3ddfa6c3c02fcc30ada5efa0e5fdec46 GIT binary patch literal 80971 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 literal 0 HcmV?d00001 diff --git a/docs/manual/_sources/gettingstartedfast.rst.txt b/docs/manual/_sources/gettingstartedfast.rst.txt index 24264b9..d01e556 100644 --- a/docs/manual/_sources/gettingstartedfast.rst.txt +++ b/docs/manual/_sources/gettingstartedfast.rst.txt @@ -35,6 +35,15 @@ on your system, you might need to reboot your system for your program to become available. If you get a "command not found" error or similar when running the program, reboot your system and try again. +If you would rather use a program with a graphical user interface, you can take +a look at `Sideband `_, which is available for Android, +Linux and macOS. + +.. image:: screenshots/sideband_1.png + :width: 400px + :align: center + :target: _images/sideband_1.png + Using the Included Utilities ============================================= @@ -59,27 +68,34 @@ 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 -your existing ethernet network (if there is one), and only allows you to -communicate with other Reticulum peers within your local broadcast domain. +your existing ethernet and WiFi networks (if any), and only allows you to +communicate with other Reticulum peers within your local broadcast domains. To communicate further, you will have to add one or more interfaces. The default configuration includes a number of examples, ranging from using TCP over the internet, to LoRa and Packet Radio interfaces. +With Reticulum, you only need to configure what interfaces you want to communicate +over. There is no need to configure address spaces, subnets, routing tables, +or other things you might be used to from other network types. + +Once Reticulums knows which interfaces it should use, it will automatically +discover topography and configure transport of data to any destinations it +knows about. + Possibly, the examples in the config file are enough to get you started. If you want more information, you can read the :ref:`Building Networks` and :ref:`Interfaces` chapters of this manual. - -Bridging Over the Internet -============================================= -Reticulum currently offers two interfaces for connecting nodes over the internet: -`TCP `_ and `I2P `_. Each interface offers a different set of features, and Reticulum +Connecting Reticulum Instances Over the Internet +================================================ +Reticulum currently offers two interfaces for connecting instances over the Internet: :ref:`TCP` +and :ref:`I2P`. Each interface offers a different set of features, and Reticulum users should carefully choose the interface which best suites their needs. -The ``TCPServerInterface`` allows users to host a node accessible over TCP/IP. This +The ``TCPServerInterface`` allows users to host an instance accessible over TCP/IP. This method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``, -however it leaks considerable metadata about the server host. +however it also leaks considerable metadata about the server host. Direct TCP client connections are able to see your node's IP address and may be able to use this information to determine your location or identity. Adversaries @@ -101,16 +117,16 @@ bandwidth and compute power, but also makes timing attacks and other forms of deep-packet-inspection much more difficult. Similar to RNS, I2P uses cryptographic public keys as destination addresses, which allows users to host nodes on non-static IPs. -In general it is recommended to use an I2P node if you are hosting your node -publicly. +In general it is recommended to use an I2P node if you want to host a publically accessible +instance, while preserving anonymity. If you care more about performance, and a slightly +easier setup, use TCP. -There is a experimental public testnet you can join by adding the following +There is a experimental public testnet you can join by adding one of the following interfaces to your ``.reticulum/config`` file: .. code:: # For connecting over TCP/IP: - [[RNS Testnet Frankfurt]] type = TCPClientInterface interface_enabled = yes @@ -120,7 +136,6 @@ interfaces to your ``.reticulum/config`` file: # For connecting over I2P: - [[RNS Testnet I2P Node A]] type = I2PInterface interface_enabled = yes @@ -212,8 +227,11 @@ installing Reticulum or programs that depend on Reticulum. Reticulum on Android ============================================== Reticulum can be used on Android in different ways. The easiest way to get -started is using the `Termux app `_, at the time of writing -available on `F-droid `_. +started is using an app like `Sideband `_. + +For more control and features, you can use Reticulum and related programs via +the `Termux app `_, at the time of writing available on +`F-droid `_. Termux is a terminal emulator and Linux environment for Android based devices, which includes the ability to use many different programs and libraries, @@ -253,3 +271,18 @@ From within Termux, execute the following: It is also possible to include Reticulum in apps compiled and distributed as Android APKs. A detailed tutorial and example source code will be included here at a later point. + +Adding Radio Interfaces +============================================== +Once you have Reticulum installed and working, you can add radio interfaces with +any compatible hardware you have available. For information on how to configure +this, see the :ref:`Interfaces` section of this manual. + +A range of common LoRa development boards and transceiver modules can be used +as interfaces with Reticulum. You can refer to the following external resources +for more information: + +* `How To Make Your Own RNodes `_ +* `Installing RNode Firmware on Compatible LoRa Devices `_ +* `Private, Secure and Uncensorable Messaging Over a LoRa Mesh `_ +* `RNode Firmware `_ diff --git a/docs/manual/_sources/understanding.rst.txt b/docs/manual/_sources/understanding.rst.txt index fe3c40b..5e267be 100644 --- a/docs/manual/_sources/understanding.rst.txt +++ b/docs/manual/_sources/understanding.rst.txt @@ -300,16 +300,36 @@ networks are fundamentally incompatible with the physical link types that Reticu These routing methodologies assume trust at the physical layer, and often needs a lot more bandwidth than Reticulum can assume is available. -Since Reticulum is designed to run over open radio spectrum, no such trust exists, and bandwidth is often -very limited. Existing routing protocols like BGP or OSPF carry too much overhead to be practically +Since Reticulum is designed to survive running over open radio spectrum, no such trust exists, and bandwidth +is often very limited. Existing routing protocols like BGP or OSPF carry too much overhead to be practically useable over bandwidth-limited, high-latency links. To overcome such challenges, Reticulum’s *Transport* system uses public-key cryptography to -implement the concept of *paths* that allow discovery of how to get information to a certain +implement the concept of *paths* that allow discovery of how to get information closer to a certain destination. It is important to note that no single node in a Reticulum network knows the complete path to a destination. Every Transport node participating in a Reticulum network will only know what the most direct way to get a packet one hop closer to it's destination is. + +.. _understanding-nodetypes: + +Node Types +---------- + +Currently, Reticulum distinguishes between two types of network nodes. All nodes on a Reticulum network +are *Reticulum Instances*, and some are alo *Transport Nodes*. If a system running Reticulum is fixed in +one place, and is intended to be kept available most of the time, it can be a *Transport Node*, by enabling +it in the configuration. + +This distinction is made by the user configuring the node, and is used to determine what nodes on the +network will help forward traffic, and what nodes rely on other nodes for wider connectivity. + +If a node is a *Instance* it should be given the configuration directive ``enable_transport = No``, which +is the default setting. + +If it is a *Transport Node*, it should be given the configuration directive ``enable_transport = Yes``. + + .. _understanding-announce: The Announce Mechanism in Detail @@ -325,14 +345,14 @@ according to some specific rules: total it has been retransmitted to get here. * | If the announce has been retransmitted *m+1* times, it will not be forwarded. By default, *m* is - set to 18. + set to 128. * | The announce will be assigned a delay *d* = c\ :sup:`h` seconds, where *c* is a decay constant, and *h* is the amount of times this packet has already been forwarded. * | The packet will be given a priority *p = 1/d*. * | If at least *d* seconds has passed since the announce was received, and no other packets with a - priority higher than *p* are waiting in the queue (see Packet Prioritisation), and the channel is + priority higher than *p* are waiting in the queue, and the channel is not utilized by other traffic, the announce will be forwarded. * | If no other nodes are heard retransmitting the announce with a greater hop count than when @@ -354,10 +374,15 @@ packet towards the destination by looking up the next node with the shortest amo destination. According to these rules and default constants, an announce will propagate throughout the network -in a predictable way. In an example network utilising the default constants, and with an average link -distance of *Lavg =* 15 kilometers, an announce will be able to propagate outwards to a radius of 180 -kilometers in 34 minutes, and a *maximum announce radius* of 270 kilometers in approximately 3 -days. +in a predictable way. + +As an example, in a network based only on radio transceivers with an average link distance of 15 +kilometers, an announce will be able to propagate outwards over 12 hops, to a radius of 180 +kilometers, in approximately 20 minutes. + +The design and constants of the decay and delay functionality in the announce propagation is subject +to change and optimisation as real-world usage is explored. The announce propagation speed can be +increased at the cost of increased bandwidth consumption. .. _understanding-paths: @@ -579,20 +604,6 @@ Reticulum, but non critical in understanding how the protocol works on a general treated more as a reference than as essential reading. -Node Types ----------- - -Currently Reticulum defines two node types, the *Station* and the *Peer*. A node is a *station* if it fixed -in one place, and if it is intended to be kept online most of the time. Otherwise the node is a *peer*. - -This distinction is made by the user configuring the node, and is used to determine what nodes on the -network will help forward traffic, and what nodes rely on other nodes for connectivity. - -If a node is a *Peer* it should be given the configuration directive ``enable_transport = No``. - -If it is a *Station*, it should be given the configuration directive ``enable_transport = Yes``. - - Packet Prioritisation --------------------- diff --git a/docs/manual/_static/documentation_options.js b/docs/manual/_static/documentation_options.js index 381b261..9009973 100644 --- a/docs/manual/_static/documentation_options.js +++ b/docs/manual/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.3.3 beta', + VERSION: '0.3.4 beta', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/manual/examples.html b/docs/manual/examples.html index 0157548..5142faa 100644 --- a/docs/manual/examples.html +++ b/docs/manual/examples.html @@ -5,7 +5,7 @@ - Code Examples — Reticulum Network Stack 0.3.3 beta documentation + Code Examples — Reticulum Network Stack 0.3.4 beta documentation @@ -27,7 +27,7 @@ - + @@ -2366,7 +2366,7 @@ interface to efficiently pass files of any size over a Reticulum previous | - + diff --git a/docs/manual/genindex.html b/docs/manual/genindex.html index 658db02..726d645 100644 --- a/docs/manual/genindex.html +++ b/docs/manual/genindex.html @@ -5,7 +5,7 @@ - Index — Reticulum Network Stack 0.3.3 beta documentation + Index — Reticulum Network Stack 0.3.4 beta documentation @@ -23,7 +23,7 @@
  • index
  • - + @@ -416,7 +416,7 @@
  • index
  • - + diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html index 661849d..85196d9 100644 --- a/docs/manual/gettingstartedfast.html +++ b/docs/manual/gettingstartedfast.html @@ -5,7 +5,7 @@ - Getting Started Fast — Reticulum Network Stack 0.3.3 beta documentation + Getting Started Fast — Reticulum Network Stack 0.3.4 beta documentation @@ -31,7 +31,7 @@
  • previous |
  • - + @@ -67,6 +67,10 @@ for the messaging and information-sharing protocol on your system, you might need to reboot your system for your program to become available. If you get a “command not found” error or similar when running the program, reboot your system and try again.

    +

    If you would rather use a program with a graphical user interface, you can take +a look at Sideband, which is available for Android, +Linux and macOS.

    +_images/sideband_1.png

    Using the Included Utilities

    @@ -87,23 +91,29 @@ default is located at 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 -your existing ethernet network (if there is one), and only allows you to -communicate with other Reticulum peers within your local broadcast domain.

    +your existing ethernet and WiFi networks (if any), and only allows you to +communicate with other Reticulum peers within your local broadcast domains.

    To communicate further, you will have to add one or more interfaces. The default configuration includes a number of examples, ranging from using TCP over the internet, to LoRa and Packet Radio interfaces.

    +

    With Reticulum, you only need to configure what interfaces you want to communicate +over. There is no need to configure address spaces, subnets, routing tables, +or other things you might be used to from other network types.

    +

    Once Reticulums knows which interfaces it should use, it will automatically +discover topography and configure transport of data to any destinations it +knows about.

    Possibly, the examples in the config file are enough to get you started. If you want more information, you can read the Building Networks and Interfaces chapters of this manual.

    -
    -

    Bridging Over the Internet

    -

    Reticulum currently offers two interfaces for connecting nodes over the internet: -TCP and I2P. Each interface offers a different set of features, and Reticulum +

    +

    Connecting Reticulum Instances Over the Internet

    +

    Reticulum currently offers two interfaces for connecting instances over the Internet: TCP +and I2P. Each interface offers a different set of features, and Reticulum users should carefully choose the interface which best suites their needs.

    -

    The TCPServerInterface allows users to host a node accessible over TCP/IP. This +

    The TCPServerInterface allows users to host an instance accessible over TCP/IP. This method is generally faster, lower latency, and more energy efficient than using I2PInterface, -however it leaks considerable metadata about the server host.

    +however it also leaks considerable metadata about the server host.

    Direct TCP client connections are able to see your node’s IP address and may be able to use this information to determine your location or identity. Adversaries inspecting your network’s internet packets may be able to record packet metadata @@ -121,12 +131,12 @@ will also relay other I2P user’s encrypted packets, which will use extra bandwidth and compute power, but also makes timing attacks and other forms of deep-packet-inspection much more difficult. Similar to RNS, I2P uses cryptographic public keys as destination addresses, which allows users to host nodes on non-static IPs.

    -

    In general it is recommended to use an I2P node if you are hosting your node -publicly.

    -

    There is a experimental public testnet you can join by adding the following +

    In general it is recommended to use an I2P node if you want to host a publically accessible +instance, while preserving anonymity. If you care more about performance, and a slightly +easier setup, use TCP.

    +

    There is a experimental public testnet you can join by adding one of the following interfaces to your .reticulum/config file:

    # For connecting over TCP/IP:
    -
     [[RNS Testnet Frankfurt]]
       type = TCPClientInterface
       interface_enabled = yes
    @@ -136,7 +146,6 @@ interfaces to your 
     
     
     # For connecting over I2P:
    -
     [[RNS Testnet I2P Node A]]
       type = I2PInterface
       interface_enabled = yes
    @@ -217,8 +226,10 @@ installing Reticulum or programs that depend on Reticulum.

    Reticulum on Android

    Reticulum can be used on Android in different ways. The easiest way to get -started is using the Termux app, at the time of writing -available on F-droid.

    +started is using an app like Sideband.

    +

    For more control and features, you can use Reticulum and related programs via +the Termux app, at the time of writing available on +F-droid.

    Termux is a terminal emulator and Linux environment for Android based devices, which includes the ability to use many different programs and libraries, including Reticulum.

    @@ -254,6 +265,21 @@ and a few extra commands are required.

    Android APKs. A detailed tutorial and example source code will be included here at a later point.

    +
    +

    Adding Radio Interfaces

    +

    Once you have Reticulum installed and working, you can add radio interfaces with +any compatible hardware you have available. For information on how to configure +this, see the Interfaces section of this manual.

    +

    A range of common LoRa development boards and transceiver modules can be used +as interfaces with Reticulum. You can refer to the following external resources +for more information:

    + +
    @@ -269,11 +295,12 @@ here at a later point.

  • Try Using a Reticulum-based Program
  • Using the Included Utilities
  • Creating a Network With Reticulum
  • -
  • Bridging Over the Internet
  • +
  • Connecting Reticulum Instances Over the Internet
  • Develop a Program with Reticulum
  • Participate in Reticulum Development
  • Reticulum on ARM64
  • Reticulum on Android
  • +
  • Adding Radio Interfaces
  • @@ -317,7 +344,7 @@ here at a later point.

  • previous |
  • - +
    diff --git a/docs/manual/index.html b/docs/manual/index.html index 7741d62..b58cd87 100644 --- a/docs/manual/index.html +++ b/docs/manual/index.html @@ -5,7 +5,7 @@ - Reticulum Network Stack Manual — Reticulum Network Stack 0.3.3 beta documentation + Reticulum Network Stack Manual — Reticulum Network Stack 0.3.4 beta documentation @@ -27,7 +27,7 @@
  • next |
  • - +
    @@ -56,11 +56,12 @@ to participate in the development of Reticulum itself.

  • Try Using a Reticulum-based Program
  • Using the Included Utilities
  • Creating a Network With Reticulum
  • -
  • Bridging Over the Internet
  • +
  • Connecting Reticulum Instances Over the Internet
  • Develop a Program with Reticulum
  • Participate in Reticulum Development
  • Reticulum on ARM64
  • Reticulum on Android
  • +
  • Adding Radio Interfaces
  • Using Reticulum on Your System
      @@ -112,6 +113,7 @@ to participate in the development of Reticulum itself.

  • Reticulum Transport
  • diff --git a/docs/manual/interfaces.html b/docs/manual/interfaces.html index e1319d8..4d06e7d 100644 --- a/docs/manual/interfaces.html +++ b/docs/manual/interfaces.html @@ -5,7 +5,7 @@ - Supported Interfaces — Reticulum Network Stack 0.3.3 beta documentation + Supported Interfaces — Reticulum Network Stack 0.3.4 beta documentation @@ -31,7 +31,7 @@
  • previous |
  • - + @@ -580,7 +580,7 @@ disappear again.

  • previous |
  • - + diff --git a/docs/manual/networks.html b/docs/manual/networks.html index e141e7b..0ad8f6d 100644 --- a/docs/manual/networks.html +++ b/docs/manual/networks.html @@ -5,7 +5,7 @@ - Building Networks — Reticulum Network Stack 0.3.3 beta documentation + Building Networks — Reticulum Network Stack 0.3.4 beta documentation @@ -31,7 +31,7 @@
  • previous |
  • - + @@ -247,7 +247,7 @@ connected outliers are now an integral part of the network.

  • previous |
  • - + diff --git a/docs/manual/objects.inv b/docs/manual/objects.inv index be00e26d71f001efe0e62d9159c28b31fc909b6e..971f26468cf4b3b4bb9f72959eaf2cd2bd8ced0c 100644 GIT binary patch delta 1720 zcmV;p21oh84$cmcs(&S_B$ZwN`wm5lmMGaG?L8%s-sdGX8V-j_R*UuI5erEQBnc~` z^6)vKNQmh7h~pjRxJd9MlR5q6*XZ_U)m0CZw>{Ls28>WqunP3bCC4&jsow-pS;nYH zVA;&#PK^mh<{Kt#R)%@G92T0PlUug z=J>w~?!*}cgkm1*1a~i)z^8JEI4DkCOFqlr}h$(!@JrC zzbQfXg%2}pWq;C032mg4hqu*VQw1O?IoVbcdqDkxhAXbsIsD7?+j{nI@UWZJ+v4GF zGkuJo@7B++)5Vv~bEro^k+V!dU9wEQ#D}Ewbc-BY`{eKQpr7ie9d>~5Tp}fX>g}Uxh zk(4Z`8r8sby}7%8ovoke)5Rv<%;wXtZ<}~IUB%B|mmx+k)9Lc=brv>y_tA!HV6AB} zE4`ttaDs`hDd%WM-SVlI5zZMbgpdxRW;L)201A{y@`2+W^SA z?9|@+3xC@L%XWglBY_=4%SNz@C-_>L6$!1Bvk9DhS`x(W`O!l~WD6EHm<+e1Ex@bSzh zqmPFqz1TpMtPuE0ypG?69{#DbG9}C_)LJ^goZ8Hd&f!rCsVRwXgbbA+xJQGK@NAGI zsc4mZMZ;((^Nnx0JTe0#or+;2bS*^2Dw@U>WD3bkX!40UcLzNwbj7HEgyS;C1=>>V zm4Ee{2J#4$)lQaoo9Cz5;t{&lxo5HC^p8(}jMD#1K=d+OuZKOzr*h0< z_GvlHz7rwF;L{`bGo(+C#gCP0Esaj%f#o@DPSzv(s=2lmFH}B`7_Amc^vYIf_?ZOe z#9f>NPo-6Z4l*f|F@E!~j25R;Cd4Q&;=uX#ebnW?e zcR#0}5E$_!>kg%_nfjpbFVP;~R4@jIx>eLuZjI2np}Dt?_P9%Tq$hUWzMV>k4BPED zn#1;q3LCm%DM5yDuMSp@MI}od7glMmY8yo|2g+n-N1~!>{^PGwVO0IwkLo?W z-l<`tbptu3w&aNe95-{X**2APt&ugBRoS!ECltTOH(JNz#1Z9$N7LaQ4=j~%i?28q zUD3(P2=eb6Ou{^pMlpvnU9>aY$3urTJ!5k;Kq5lNpz;p_yUzCvQlYb{>MQy&{)XQp OxNSZDy!juT^uf+7-fH*& delta 1706 zcmV;b237ga4!{nOs((eQB$ZwN`wm5l)|V~P-ctf`o|oikW;j%`TC69JSSrGhBAi9V z;d4Tfl+o{zz&k83OYkI9IsN6===NsSwjL&LduRt65JHUc6701~j#b7}zXhP8h!IO; zBnzA<8SezoV}|lzp@d>2;uP;tNmZ<6Q>0L^ioi(W_#Gc)D1VybL>vkgjtRUcQehDb z{9g$paRv^dScEFU=p_r-m6TrO@jX^?A;^bySSX$$nO(vhL!=5El47Qa3Z9;FlwPy^ zpY_%xc=6h()f$wr_ZXg`EhRF;X`CQRwy>Q6LWah+X?1|7^N$qZ#i<*1?8{JmXN8*MW}#M z0~-xq@+CE|17Egifpz*{fCQC9$A)J7MDg&bQ3CoMq<>3W@O$_`l)$FE=6i*@?opAn zSx_~qfa!X3cmFzDKhLL&O}v@Sr(fST@p8I~pT90cgkGl8<=yKnZ1(onhHGGD(_mKS zKw04g6H`;p(H-lCPL)PD=a2{?9Yn<%U>5)|lqm9n;~f{?5aTgnTWG4&P>h!sDwPf+pibShfG-6!SWy^7wldTAad z#TZVei-*;>rEVMMk8hsoZPDfH-E46I)>+|jZdoL@rS*ET}W01A0C|7hwC>KgM_y>X_hi~1VEn1)*mF`_wD~D|bM`?njI?vtL zW)8$j#?LcTuyE%3qeQhi*vNV8sbT4GcTqiy&g>N|G4Wr+{dn$zRXEq?IbkG6^nW}t zH%1PsFP(T8^O~*>r%*a|nR%ptT9vD6F6h~A0$k`91UU$AWxW|mJ6#r;5^;0v| zO#cd&3W~_yUIBM?blAo9M-BVMJdf69AbQf_a-7l9jmeHj_yVi%T)b-(+Tl53CAij= zXxZlLr$%I57CH}LzL^_optq=0oqss(DCn%vHV$vmKR*32O8+wfqnFuwJ*+`K6=M>! zPs?HUok%$bpPsoNA$@wxf4tDSG`fffp675lIgRM6;hIu{>3AFwS}nBED_^1EJxMG` zH#rA(Wvm7jR8k~k{N`a9Jx~JWj9Gy zbDowI+f-&Ivsx)sKQrd{C84R#TbqQ^F$3|_LiM@OgB!~kS?BTqO%H1?*Bx}t^|nvH zPCp?r5=qvc$~?36!Hh4_9^aHOhk&}pswFpOXbl+dtz~;WrCX*aPTjto4u=f8<2Rba z@rf9bIlOe}*%TtQqr63uB!4?F)@g)juZ0_&17byhJ1YhbnR~4fJvBu-vosn@hVt4g z=O=0Y`^2JxPK(MgJ=syRN6oGjD(m(QgIe_&^kj&x97oh=MPIaChqa9~!9D^rXWUVF z$A>y(axn4HT2_CkieB)+g-?Zcl>50lsOA^eIam5mYrX5npyb>ccYjn&+rHx>N6JIz z9)ds|>IVL)!g`7-^YPgVqa@QCgdk{Li8^wEE1qzw|6@nDjb5+AGSRw*I-;&x$phRJ zbFbCbMQ?48HCAQOlQowMzwKMwj>d`G#R-kNIXm7pO4+TO@>nlrE1)6>oo}!RyCs7T z1*vQXr;mnlYkEfJC?kMmgpN)X9|R7J?-_(b>pV11%r^dp-y;}y8h_sW4|)Emi28j> A^8f$< diff --git a/docs/manual/reference.html b/docs/manual/reference.html index 9179ae1..6183313 100644 --- a/docs/manual/reference.html +++ b/docs/manual/reference.html @@ -5,7 +5,7 @@ - API Reference — Reticulum Network Stack 0.3.3 beta documentation + API Reference — Reticulum Network Stack 0.3.4 beta documentation @@ -31,7 +31,7 @@
  • previous |
  • - + @@ -1238,7 +1238,7 @@ will announce it.

  • previous |
  • - + diff --git a/docs/manual/search.html b/docs/manual/search.html index 5cd18c7..f54da6b 100644 --- a/docs/manual/search.html +++ b/docs/manual/search.html @@ -5,7 +5,7 @@ - Search — Reticulum Network Stack 0.3.3 beta documentation + Search — Reticulum Network Stack 0.3.4 beta documentation @@ -29,7 +29,7 @@
  • index
  • - + @@ -85,7 +85,7 @@
  • index
  • - + diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index c4ed7b0..78fc7ff 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["examples","gettingstartedfast","index","interfaces","networks","reference","understanding","using","whatis"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"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:56},filenames:["examples.rst","gettingstartedfast.rst","index.rst","interfaces.rst","networks.rst","reference.rst","understanding.rst","using.rst","whatis.rst"],objects:{"RNS.Destination":{announce:[5,1,1,""],app_and_aspects_from_name:[5,1,1,""],clear_default_app_data:[5,1,1,""],create_keys:[5,1,1,""],decrypt:[5,1,1,""],deregister_request_handler:[5,1,1,""],encrypt:[5,1,1,""],full_name:[5,1,1,""],get_private_key:[5,1,1,""],hash:[5,1,1,""],hash_from_name_and_identity:[5,1,1,""],load_private_key:[5,1,1,""],register_request_handler:[5,1,1,""],set_default_app_data:[5,1,1,""],set_link_established_callback:[5,1,1,""],set_packet_callback:[5,1,1,""],set_proof_requested_callback:[5,1,1,""],set_proof_strategy:[5,1,1,""],sign:[5,1,1,""]},"RNS.Identity":{CURVE:[5,2,1,""],KEYSIZE:[5,2,1,""],TRUNCATED_HASHLENGTH:[5,2,1,""],decrypt:[5,1,1,""],encrypt:[5,1,1,""],from_bytes:[5,1,1,""],from_file:[5,1,1,""],full_hash:[5,1,1,""],get_private_key:[5,1,1,""],get_public_key:[5,1,1,""],get_random_hash:[5,1,1,""],load_private_key:[5,1,1,""],load_public_key:[5,1,1,""],recall:[5,1,1,""],recall_app_data:[5,1,1,""],sign:[5,1,1,""],to_file:[5,1,1,""],truncated_hash:[5,1,1,""],validate:[5,1,1,""]},"RNS.Link":{CURVE:[5,2,1,""],ESTABLISHMENT_TIMEOUT_PER_HOP:[5,2,1,""],KEEPALIVE:[5,2,1,""],get_remote_identity:[5,1,1,""],identify:[5,1,1,""],inactive_for:[5,1,1,""],no_inbound_for:[5,1,1,""],no_outbound_for:[5,1,1,""],request:[5,1,1,""],set_packet_callback:[5,1,1,""],set_remote_identified_callback:[5,1,1,""],set_resource_callback:[5,1,1,""],set_resource_concluded_callback:[5,1,1,""],set_resource_started_callback:[5,1,1,""],set_resource_strategy:[5,1,1,""],teardown:[5,1,1,""]},"RNS.Packet":{ENCRYPTED_MDU:[5,2,1,""],PLAIN_MDU:[5,2,1,""],resend:[5,1,1,""],send:[5,1,1,""]},"RNS.PacketReceipt":{get_rtt:[5,1,1,""],get_status:[5,1,1,""],set_delivery_callback:[5,1,1,""],set_timeout:[5,1,1,""],set_timeout_callback:[5,1,1,""]},"RNS.RequestReceipt":{get_progress:[5,1,1,""],get_request_id:[5,1,1,""],get_response:[5,1,1,""],get_response_time:[5,1,1,""],get_status:[5,1,1,""]},"RNS.Resource":{advertise:[5,1,1,""],cancel:[5,1,1,""],get_progress:[5,1,1,""]},"RNS.Reticulum":{MTU:[5,2,1,""],should_use_implicit_proof:[5,1,1,""],transport_enabled:[5,1,1,""]},"RNS.Transport":{PATHFINDER_M:[5,2,1,""],deregister_announce_handler:[5,1,1,""],has_path:[5,1,1,""],hops_to:[5,1,1,""],next_hop:[5,1,1,""],next_hop_interface:[5,1,1,""],register_announce_handler:[5,1,1,""],request_path:[5,1,1,""]},RNS:{Destination:[5,0,1,""],Identity:[5,0,1,""],Link:[5,0,1,""],Packet:[5,0,1,""],PacketReceipt:[5,0,1,""],RequestReceipt:[5,0,1,""],Resource:[5,0,1,""],Reticulum:[5,0,1,""],Transport:[5,0,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"]},objtypes:{"0":"py:class","1":"py:method","2":"py:attribute"},terms:{"0":[0,3,5,6,7,8],"00":6,"000":[],"00000000":6,"00000100":6,"00000111":6,"01":[6,7],"01010000":6,"02":7,"05":0,"07":7,"1":[0,3,5,6,7],"10":[0,3,6,7],"100":[0,6],"1000":[0,6],"1024":0,"11":6,"115200":[3,7],"12":3,"1200":6,"125":3,"125000":3,"127":3,"128":[5,6,8],"13":7,"14":6,"141":[],"15":[3,6],"150":[3,7],"150m":3,"151":6,"16":[3,7],"18":6,"180":6,"182":[],"2":[0,3,6,7],"20":[0,3,6,7],"200":[3,7],"2000000":[],"205":[],"211":[],"237":[6,8],"24":3,"240":[],"25":[0,2,8],"255":3,"256":[5,6],"270":6,"2f":0,"3":[0,6,7,8],"323":[],"33":6,"34":6,"360":5,"3600":0,"37":7,"37428":7,"38":7,"383":5,"3e12fc71692f8ec47bc5":1,"4":[6,7],"409":[],"4242":[3,7],"430":6,"45":0,"469":7,"477":[5,6],"48555":3,"49555":3,"4965":[1,7],"5":[0,3,5,6],"500":[5,6,8],"5001":3,"512":5,"55":3,"56b115c30cd386cad69c":7,"5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq":3,"60":0,"600":3,"62":[6,8],"7":[3,6],"72":3,"77":6,"7ca6f4e4dc26ae329e61":[],"8":[0,3,7],"80":[5,6],"8001":3,"80e29bf7cccaf31431b3":6,"83":6,"86":[],"867":3,"867200000":3,"868":6,"88":3,"9":7,"900":6,"9382f334de63217a4278":7,"95":6,"\u00ec2pd":3,"abstract":6,"break":[5,6,8],"byte":[0,5,6,7,8],"case":[1,3,4,6,7],"class":[0,2,8],"default":[0,1,3,4,5,6,7],"do":[0,1,3,5,6,7,8],"export":1,"float":[0,5],"function":[0,1,2,3,4,5,8],"import":[0,1,3,4,6],"int":0,"long":[0,3,6],"new":[0,3,4,5,6],"public":[0,1,2,3,5],"return":[0,5],"short":[6,7],"static":[1,5],"switch":3,"throw":[],"true":[0,1,3,5,7],"try":[0,2],"while":[0,3,4,5,6,8],A:[0,1,3,4,5,6,8],And:0,As:[4,5,6,8],At:[4,6],Be:[5,7],But:6,By:[0,1,3,5,6],For:[1,3,4,5,6,8],IN:[0,5],If:[0,1,3,4,5,6,7,8],In:[0,1,3,4,5,6,7,8],It:[0,1,3,5,6,8],No:[6,8],On:[0,1,3,7],One:5,Or:[3,6],That:6,The:[0,1,2,3,4,5,8],Then:1,There:[1,4,6,8],These:[3,6,7],To:[0,1,3,4,6,7,8],Will:5,With:[2,3,4,6,7],_:6,__:6,______:6,_______:6,________:6,________________:6,__init__:0,__main__:0,__name__:0,_exit:0,aarch64:1,ab:0,abil:1,abl:[0,1,4,5,6,7],about:[0,1,3,4,5,6],abov:[1,3,6],absolut:[],accept:[5,6],accept_al:[0,5],accept_app:5,accept_non:5,access:[1,3,5,6,7],access_point:3,accord:6,accordingli:0,acheiv:[3,6],achiev:[5,6],acknowledg:8,across:4,act:[5,6],action:0,activ:[0,1,5,6],actor:6,actual:[0,1,3,6],ad:[0,1,4,5,8],adapt:4,add:[0,1,3,4,7],add_argu:0,addit:[6,8],addr1:6,addr2:6,address:[0,1,3,4,5,6,8],adher:5,admin:3,administr:7,adress:[0,1,4,5,8],advantag:5,adversari:1,advertis:[0,5],advis:6,ae:[6,8],after:[0,4,6,7],again:[1,3,6],against:6,agent:6,agnost:[4,6],agnostic:6,aim:[2,6],air:8,airtim:3,aliv:[5,6],all:[0,1,2,3,4,5,6,7,8],alloc:7,allow:[0,1,3,4,5,6,7,8],allow_al:[0,5],allow_list:5,allow_non:5,allowed_list:5,almost:[3,6],along:[4,6],alreadi:[0,4,6],also:[0,1,3,4,5,6,7,8],alter:6,altern:[0,3,7],although:8,alwai:[1,5,6,7],amateur:[3,8],amet:[],amount:[3,4,5,6,8],an:[0,1,3,4,5,6,7,8],android:2,ani:[0,1,3,4,5,6,7,8],announc:[2,3,5],announce_handl:0,announced_ident:[0,5],announceloop:0,announcesampl:0,anonym:[4,5,6,8],anoth:[1,5,6,7],answer:[6,7],anyon:[0,4,5,6],anyth:[3,6],anywher:[0,3],ap:3,apart:6,api:[1,2,6,8],apk:1,app:[0,1,5,6],app_and_aspects_from_nam:5,app_data:[0,5],app_nam:[0,5],app_timeout:0,append:[0,6],appli:6,applic:[0,5,6,7],approach:7,approv:6,approxim:6,apt:1,ar:[0,1,3,4,5,6,7,8],arbitrari:[5,6],arbritrari:8,architectur:1,area:[3,4,8],arg:0,argon:0,argpars:0,argument:[0,5,7],argumentpars:0,arm64:2,around:6,arriv:[0,6],ask:[0,5],aspect:[0,3,5,6],aspect_filt:[0,5],assign:[6,7],associ:[1,5,6],assum:[3,6],asymmetr:8,attached_interfac:[],attack:1,attempt:5,attribut:5,audit:8,authent:[5,6,8],author:6,auto:[2,5,6],auto_compress:5,autoconfigur:[3,8],autodiscov:3,autointerfac:3,autom:6,automat:[0,3,4,5,6,7,8],autonom:[4,6],autoomat:0,avail:[0,1,3,4,6,7,8],availadbl:[],averag:6,avoid:[6,7],awai:[0,4,6,7],awar:6,ax25kissinterfac:3,ax:[2,8],b32:[1,3],b:[0,4],back:[0,6,8],background:[1,3],backhaul:4,band:6,bandwidth:[1,3,4,6,8],bare:0,barrier:6,base32:3,base:[2,3,4,5,6,7,8],basi:[5,6,8],basic:[0,1,2],baud:[3,6],beacon:3,becaus:[1,4,6],becki:0,becom:[0,1,4],been:[0,3,4,5,6,8],befor:[0,1,5,6,7],begin:[0,5],begun:5,behaviour:3,behind:6,being:[3,5,6],belief:6,below:[1,3],benefici:7,best:[1,6,8],beta:8,better:3,between:[0,3,4,5,6],bgp:6,bi:6,bidirect:6,billion:4,bin:7,binari:[0,1,2],bind:3,bit:[5,6,8],blob:[0,6],block:3,board:8,boot:7,both:[1,3,4,5,6,8],bp:6,bridg:2,briefli:6,bring:3,broadcast:[1,2,3,5,6],broadcast_destin:0,broadcastloop:0,brought:[3,7],buffer:3,bug:8,build:[0,1,2,3,6,8],built:[1,6,8],bundl:0,c:[0,4,6],cabl:4,cad:6,calcul:[5,6],call:[0,4,5,6,8],callabl:5,callback:[0,5],callsign:3,can:[0,1,2,3,4,5,6,7],cancel:5,candid:4,cannot:0,capac:6,carambola:0,care:[5,8],carefulli:1,cargo_build_target:1,carri:[5,6],carrier:[4,8],caution:3,caveat:2,cb:6,cbc:8,cd:1,cdma:3,censor:6,censorship:6,central:[4,6],certain:[0,3,4,6],challeng:6,chang:[0,1,3,5,6,7,8],channel:[0,3,4,6,8],channelarg:0,chapter:[1,3,4,6,8],charact:0,characterist:6,cheap:6,check:[0,1,5],checksum:[5,8],choos:[0,1,3],chose:6,chosen:4,chunk:0,ciphertext:5,ciphertext_token:5,cl:0,clear:[0,5,6],clear_default_app_data:5,clear_screen:0,client:[0,1,2,5],client_connect:0,client_disconnect:0,client_ident:0,client_loop:0,client_packet_receiv:0,client_request:0,clone:1,close:[0,5],closed_callback:5,closer:6,cluster:6,code:[1,2,3,6],codingr:3,com:[0,1],combin:[4,6],come:[1,6],comma:3,command:[0,1,7],comment:3,common:[2,6],commun:[0,1,3,4,5,6,7,8],compat:[3,5,6],compil:1,complet:[0,1,4,5,6,8],complex:6,compon:6,compos:6,compress:[0,5,6],comput:[1,6,8],concaten:5,concept:[2,6],conclud:[0,5],concurr:[6,7],condit:6,config:[0,1,4,7],configarg:0,configdir:5,configpath:0,configur:[0,1,2,3,4,5,6,8],confirm:[6,8],conjunct:3,connect:[0,1,3,4,5,6,7,8],consequ:[],consid:[6,8],consider:1,consist:6,constant:[5,6],construct:6,contact:6,contain:[0,4,5,6],content:[4,7],context:6,control:[0,3,4,5,6],conveni:0,convent:0,converg:2,coordin:[4,5,6,8],core:[4,6,8],correct:[0,6],correctli:0,correspond:6,cost:[6,8],could:[0,3,4,5,6,8],count:6,counter:0,cours:3,cover:8,coverag:4,cpu:0,creat:[0,2,3,5,6,7],create_kei:5,create_receipt:[0,5],creation:6,creator:6,critic:6,cryptograph:[1,4,8],cryptographi:[1,6,8],ctrl:0,cull:5,current:[0,1,2,3,5,6],current_download:0,current_filenam:0,curv:[4,5,6,8],curve25519:[4,5,6,8],custom:[5,6],custom_network_nam:3,d:[4,6],daemon:[1,3,5,7],dai:[4,6],data:[0,3,4,5,6,8],data_port:3,databit:[3,7],date:[0,1],db:0,dbm:[0,3],debian:[6,7],debug:[],decai:6,decid:[4,5,6],decod:0,decrypt:[5,6],dedic:6,deep:1,def:0,default_timeout:[],defin:[0,3,6],definit:6,degrad:4,degre:3,delai:[6,7],deliv:[0,5],deliveri:[0,5,8],demand:5,demonstr:[0,3],depend:[1,4,7],deploi:6,deregist:5,deregister_announce_handl:5,deregister_request_handl:5,deriv:[6,8],describ:[3,5,6],descript:[0,7],design:[4,6,8],desir:[0,3,6],destin:[0,1,2,3,4,7],destination_1:0,destination_2:0,destination_clos:0,destination_hash:[0,5,7],destination_hexhash:0,detail:[0,1,2,3,5,7,8],detect:0,determin:[1,5,6],dev:[1,3,7],develop:[2,6,8],devic:[1,2,3,4,5,6,7],dh:5,dhcp:3,did:0,differ:[0,1,3,4,5,6,7,8],diffi:[4,6,8],difficult:1,digit:[6,8],dir:0,direct:[0,1,4,5,6],directli:[3,5,6,7,8],directori:[0,7],disabl:3,disable_encrypt:[],disappear:3,discard:6,disconnect:0,discover:3,discoveri:[3,6,7],discovery_port:3,discovery_scop:3,discrimin:4,discuss:6,disk:[0,5],displai:[0,6],distanc:6,distinct:[3,6],distribut:[0,1,4,5,6,7],divmod:0,document:6,doe:[0,1,2,3,4,5,6],doesn:3,dolor:[],domain:[1,3],don:[0,1,4],done:[0,1,4,6],dori:4,dot:[6,7],down:0,downgrad:[],download:[0,3],download_began:0,download_conclud:0,download_finish:0,download_start:0,download_tim:0,driver:[7,8],droid:1,drop:6,due:4,duplex:[6,8],dynam:7,e:[0,4],each:[0,1,4,6],earlier:6,eas:[3,6],easi:[3,6,7,8],easier:[1,4,7],easiest:[1,3,6],easili:[6,7,8],eca6f4e4dc26ae329e61:7,ecdh:[6,8],echo:[1,2,7],echo_destin:0,echo_request:0,ed25519:[6,8],edit:1,effici:[0,1,3,6,8],ei:0,either:[3,4,6],elaps:3,elif:0,ellipt:[4,5,6,8],els:[0,4,6],emploi:6,emptor:2,emul:1,enabl:[3,4,5,7],enable_transport:6,encapsul:[3,8],encod:0,encrypt:[0,1,4,5,6,8],encrypted_mdu:5,encryptionless:[],end:[0,4,5,6,8],endless:3,endpoint:[0,4,5,6],energi:1,engin:[],enough:1,ensur:6,enter:0,entir:[4,6],entiti:6,entri:[0,6],enumer:0,environ:[1,6],environment:6,environmentlogg:6,ephemer:[4,5,6,8],equal:[4,6],equip:[4,6],equival:3,equl:[],error:[0,1],especi:3,essenti:[1,6],establish:[0,3,5,8],established_callback:5,establishment_timeout_per_hop:5,etc:7,eth0:3,eth1:3,ethernet:[1,3,4,6,8],even:[4,6,7,8],event:3,everi:[0,3,4,5,6],everyon:[4,6],everyth:[0,4,6],evolv:4,exact:6,exactli:[5,6],exampl:[1,2,3,5,6,7,8],example_util:[0,7],exampleannouncehandl:0,exce:0,except:[0,3,6],exchang:[4,5,6,8],execstart:7,execstartpr:7,execut:[0,1,5,7],exhaust:6,exist:[0,1,3,6,8],exit:[0,1,5,7],exit_handl:0,expand:6,expect:[0,3,5,6,7],experi:[1,6],experiment:[1,8],expiri:3,explain:5,explan:6,explicit:5,explicitli:[],explor:[0,6,8],expos:[3,5],extend:[0,1,6],extern:[3,5,8],extra:[1,3,4,7],extrem:8,f:1,fa7ddfab5213f916dea:6,face:1,fact:[6,8],factor:3,fail:[0,5],failed_callback:[0,5],fals:[0,3,5],far:[4,6],fast:2,faster:1,fastest:3,featur:[1,6,8],feed:5,feedback:0,fernet:8,few:[1,3,4,6,7,8],field:6,file:[0,1,3,4,5,6,7,8],file_resourc:0,file_s:0,filelist:0,filelist_data:0,filelist_receiv:0,filelist_timeout_job:0,filenam:0,filetransf:[1,2,5],filter:[0,4,6],find:[4,6],firewal:3,firmwar:6,first:[0,1,3,5,6],fit:0,five:0,fix:[2,6],flag:[5,6],flexibl:3,flow:[3,4],flow_control:3,flush:0,folder:1,follow:[0,1,3,6,7,8],forcibl:5,foreground:1,foremost:8,form:[1,3,4,5,6],format:[0,2,8],forth:0,forward:[3,5,6,8],forward_ip:3,forward_port:3,found:[0,1,4,6,7],four:4,frame:3,frankfurt:[1,7],free:8,frequenc:[3,6],frequent:3,friendli:8,from:[0,1,3,4,5,6,7,8],from_byt:5,from_fil:5,fromhex:0,fruit:0,ftdi_ft230x_basic_uart_43891ckm:7,full:[0,3,5,6,7,8],full_hash:5,full_nam:[5,7],fulli:[1,6,8],funcion:5,fundament:6,further:[1,2],futur:[4,6],g:0,ga:0,gatekeep:6,gatewai:4,gen:[],gener:[0,1,3,4,5,6,8],generalis:8,geograph:4,get:[0,2,3,5,8],get_packet_rssi:0,get_packet_snr:0,get_private_kei:5,get_progress:[0,5],get_public_kei:5,get_random_hash:[0,5],get_remote_ident:[0,5],get_request_id:5,get_respons:5,get_response_tim:5,get_rtt:[0,5],get_statu:5,geti2p:3,gi:0,gigabyt:8,gipsum:[],git:1,github:[0,1],give:[3,6],given:[4,6],global:[0,3,4,8],go:[0,1,6],goal:[2,3],good:[4,6],got:0,got_respons:0,govern:6,grape:0,great:6,greater:6,greatli:3,group:[3,5,6],group_id:3,grow:4,growth:2,guarante:6,guid:[1,5,6],h:[1,6,7],ha:[0,3,4,5,6,8],had:6,half:[6,8],hand:[0,1],handheld:6,handl:[0,3,4,5,6,7,8],handler:[0,5],happen:[0,5],hardlin:4,hardwar:[3,4,5,6,8],has_path:[0,5],hasattr:0,hash:[0,1,5,6,7],hash_from_name_and_ident:5,hashmap:0,have:[0,1,3,4,5,6,7],hazard:5,header:6,header_1:6,header_2:6,header_typ:[],hear:6,heard:[5,6],helium:0,hellman:[4,6,8],help:[0,4,6,7,8],her:4,here:[0,1,3,6,7],hexadecim:[0,6,7],high:[3,6,8],higher:[6,8],highli:6,hill:4,hint:0,hit:0,hmac:8,hoc:8,hold:[5,6],home:4,homebrew:3,hop:[4,5,6,7,8],hops_to:5,host:[0,1,3,6,7,8],hostnam:3,hour:0,how:[0,3,4,6,8],howev:[1,4,6],http:[0,1],hub:3,human:[0,5],i2p:[1,2],i2p_tunnel:3,i2pd:1,i2pinterfac:[1,3],i:0,id:[3,5,6,7],id_callsign:3,id_interv:3,idea:6,ident:[0,1,2,8],identif:[2,3,8],identifi:[0,3,5,6],identify:6,identifyexampl:0,ie:[],if00:7,ifconfig:7,ignor:[3,5,6],ignored_devic:3,illustr:4,immedi:[1,7],impact:6,implement:[0,4,5,6,8],implic:3,implicit:[5,6],improv:[2,3],inactive_for:5,inbound:[3,5],includ:[0,2,3,5,6],incom:[0,3,5],incompat:[5,6],increas:3,incur:3,indefinit:6,independ:5,independt:8,index:[0,1,2],indirectli:6,individu:6,inevit:6,infer:6,info:[5,6],inform:[0,1,2,4,5,6],infrastructur:[3,4,6],ingo:5,initi:[0,4,5,6,8],initialis:[0,5,7],input:0,insert:6,inspect:[1,3,4],instal:[1,3,4,7],instanc:[0,3,5,7],instanti:5,instead:[0,3,6,7],integr:[4,6],intend:[4,6],intention:6,inter:5,interact:[0,1,5,6],interchang:3,interconnect:2,interest:6,interfac:[0,1,2,4,5,6,7],interface_en:[1,3,7],interface_mod:3,intermitt:3,intern:[3,5,6],internet:[2,3,6,8],interv:[3,5],intiat:0,introduc:6,introduct:2,intuit:8,invalid:[0,5],investig:4,invis:[1,3],involv:4,io:[1,7],ip:[1,3,6,8],ipsum:[],ipv6:3,is_connected_to_shared_inst:0,is_request:[],is_respons:[],isdir:0,isfil:0,island:4,ism:6,isol:3,its:[5,6],itself:[2,6],iv:8,job:0,join:[0,1,6],just:[0,3,4,6,8],k:0,kb:7,kbp:6,keep:[0,4,5,6,7,8],keepal:[5,6],kei:[0,1,2,4,5,8],kept:[3,4,5,6],kernel:[3,7,8],keyboardinterrupt:0,keyerror:5,keypair:6,keysiz:5,keystor:4,khz:3,ki:0,kill:5,kilomet:6,kind:[3,4,6],kiss:[2,7],kiss_fram:3,kissinterfac:[3,7],know:[0,1,4,5,6],knowledg:[4,6],known:[0,5,6],krypton:0,lack:6,laid:6,lan:3,larg:[0,4,6],larger:6,laser:3,last:[0,3,5],last_unit:0,latenc:[1,6,8],later:[0,1],latest:[0,1,3],latest_client_link:0,launch:1,lavg:6,layer:[3,4,6,8],lead:6,leak:1,learn:[0,1,6],least:[3,6,8],leav:[4,6],ledger:6,left:[5,6],len:0,length:[0,5],less:[3,6,8],let:[0,1,3,4,6,7],level:[3,6],libffi:1,librari:1,licens:6,light:[],like:[1,3,5,6,7,8],limit:6,line:[0,1,4,6,8],link:[2,3,4,8],link_clos:0,link_establish:0,linkexampl:0,linux:[1,6],list:[0,3,5,6,8],list_deliv:0,list_fil:0,list_packet:0,list_receipt:0,list_timeout:0,listdir:0,listen:[0,3,6],listen_ip:3,listen_port:3,littl:6,lki:6,lkr:6,ll:[0,1,8],ln:[1,7],load:[0,5,7],load_private_kei:5,load_public_kei:5,local:[0,1,3,4,5,6,7,8],locat:[1,4,6,7],log:[0,3],log_error:0,log_info:0,loglevel:[0,5],longer:[0,4,6],longest:3,look:[0,1,3,6,7],loop:0,lora:[1,2,6,8],lorawan:6,lorem:[],lot:6,low:[3,4,6,8],lower:1,lxmf:1,m:[0,1,6,7],mac:6,machin:6,made:[5,6],mai:[1,3,6],main:0,mainli:4,maintain:6,make:[1,6,7],malici:6,manag:[1,5],mani:[0,1,3,4,6,7,8],manipul:6,manual:[0,1,3,4,5,7],mark:6,markqvist:[0,1],master:[0,5],match:[0,3],maximum:[5,6],mcu:6,mdu:0,mean:[6,7],measur:6,mechan:[2,3],medium:[3,4,6,8],member:4,memori:6,mention:6,menu:0,menu_mod:0,mesh:[3,4,8],messag:[0,1,5,6,7],messeng:6,metadata:1,metavar:0,method:[0,1,3,5,6],methodolog:[6,7],mhz:[3,6],mi:0,microcontrol:6,microwav:6,might:[1,3,4,6,7],millisecond:[0,7],mind:[4,8],minim:[2,6],minimalsampl:0,minimum:[0,4,6],minut:[0,1,3,6],mix:[3,4,7],mode:[0,1,3,6,8],modem:[3,4,5,6,8],modul:[0,1,6,7,8],moment:[6,8],momentarili:3,monitor:6,moon:0,mor:[],more:[1,3,4,5,6,8],most:[1,3,4,6,7,8],mostli:3,motiv:2,move:1,mqtt:4,mtu:[5,6,8],much:[1,3,6],multi:[6,7,8],multicast:3,multilater:6,multipl:[0,3,4,6,7],multipoint:6,must:[0,1,3,4,5,6],mw:3,my:6,mycal:3,n:0,name:[0,2,4,5],namespac:0,nano:1,narg:0,natur:3,necesarri:4,necessari:[1,5,6],necessarili:6,need:[0,1,2,3,4,6,7,8],neglig:6,neither:6,neon:0,net:3,netifac:1,network:[0,3,5,6,7,8],never:[3,5],newer:6,newest:6,newli:[4,6],next:[1,4,5,6],next_hop:5,next_hop_interfac:5,nicknam:6,no1cll:3,no_inbound_for:5,no_outbound_for:5,nobl:0,noble_ga:0,noble_gas:0,node:[1,2,3,4,7,8],nomad:1,nomadnet:1,non:[1,5,6],none:[0,3,5,6,7],normal:0,notat:[6,7],note:[0,1,3,6,7],noth:8,notic:6,notif:[0,5],now:[0,1,4,6,7],nt:0,num:0,number:[0,1,3,4,5,6,7],obfusc:1,object:5,obtain:6,occur:8,off:[6,8],offer:[1,2,3,5,6],often:[4,6,7],oganesson:0,old:6,onc:[0,4,5,6,8],one:[0,1,3,4,5,6,7,8],ones:3,oneself:6,onli:[0,1,3,4,5,6,7,8],onlin:6,open:[0,3,5,6,7,8],openmodem:[3,8],openssl:1,oper:[3,4,5,6,8],opt:6,optic:8,optim:4,option:[0,1,2,4,5,7],order:7,orem:[],organis:[3,4],orient:6,origin:[0,4,6],original_hash:[],os:[0,3,6,7,8],ospf:6,other:[1,3,4,5,6,7],otherwis:[5,6],our:[0,6],out:[0,3,4,5,6,8],outbound:5,outgo:[0,1,3,5,6,7],outli:4,outlier:4,outlin:[1,6],output:[3,7],outward:6,over:[0,2,3,5,6,7,8],overal:6,overcom:6,overhead:[3,6],overrid:0,overview:[2,3,6],own:[0,1,4,5,6],owner:[],p:[0,6],pack:0,packag:[1,3],packb:0,packet:[0,1,2,3,4,7,8],packet_callback:0,packet_deliv:0,packet_hash:0,packet_receipt:[0,5],packet_timed_out:0,packet_typ:[],packetreceipt:[0,5],pad:8,page:[2,6],pair:[3,6],palm:[],parallel:1,paramet:[3,4,5],pariti:[3,7],pars:0,parse_arg:0,parser:0,part:[0,4,6],particip:[2,6],pass:[0,3,4,5,6],past:[],path:[0,1,3,5,6,7],path_respons:5,pathfind:[],pathfinder_m:5,pattern:6,payload:[5,6],peach:0,peer:[0,1,3,5,6],peer_pub_byt:[],peer_sig_pub_byt:[],peopl:6,per:[5,6,8],percent:0,perfect:[],perform:[0,3,4,6],period:[3,6],perman:7,persecut:6,persist:[3,7],person:6,pet:0,philosophi:6,physic:[3,6,7],pi:[0,4,6,7,8],piec:6,ping:[1,7],pip3:[1,7],pip:[1,7],pkcs7:8,pkg:1,place:[4,6,7],plain:[0,3,5,6],plain_mdu:5,plaintext:[0,5],plan:4,platform:[1,6],pleas:[0,1,3,7,8],plenti:6,plu:6,plug:7,pmr:6,point:[1,3,4,6],pomelo:0,poorli:4,port0:7,port:[2,3,4,6,8],portabl:3,posit:7,possess:6,possibl:[1,3,4,5,6,8],potenti:[0,3,6,7],power:[1,3],practic:[6,8],pre:[1,3,5,6],preambl:[3,7],precompil:1,predict:6,prefer:6,prepar:[0,4],prerequisit:5,presenc:5,preserv:5,press:0,pretend:6,pretti:6,prettyhexrep:0,previou:0,previous:[4,5,6],primari:6,principl:[6,8],print:[0,3],print_filelist:0,print_help:0,print_menu:0,prioriti:6,prioritis:[2,4],privaci:8,privat:[3,5,6,8],privileg:7,probabl:[0,4,6,7,8],probe:7,procedur:6,process:[1,3,5,6],product:[],program:[0,2,3,5,6],program_setup:0,programm:6,programmat:6,progress:[0,5,8],progress_callback:5,project:1,prompt:0,proof:[0,5,6,7],proof_packet:0,proof_requested_callback:5,proof_strategi:5,propag:6,properli:1,properti:5,protocol:[1,2,3,8],prove:[0,6],prove_al:[0,5],prove_app:5,prove_non:5,proven:[5,6],provid:[0,1,2,3,4,5,6,8],prv_byte:5,pub_byt:5,public_inform:0,publicli:1,purchas:[4,6,8],purg:5,purpos:[3,5,6],purposefulli:6,put:0,py:[0,1,7],pyseri:1,python3:[1,7],python:[1,6,7,8],q:[0,7],queri:[0,1],queue:6,quiet:[3,7],quinc:0,quit:0,r:[0,6],radio:[1,3,4,5,6,7,8],radiu:6,radon:0,rais:[0,5],ram:3,rand:6,randint:0,random:[0,5,6],random_text_gener:0,randomli:[0,6],rang:[0,1,3,4,6,8],raspberri:[4,6,7,8],rate:[0,3],rb:0,re:[0,3,5,6],reach:[2,3,4],reachabl:[0,3,4,5,6],read:[0,1,6],readabl:[0,5,6],readi:[0,1,3,4,5],readili:8,real:[4,8],realli:[3,5],reason:[3,6],reassembl:6,reboot:1,recal:[0,5],recall_app_data:5,recap:6,receipt:[0,2,6],receiv:[0,1,3,5,6,7],received_announc:[0,5],reception_rssi:0,reception_snr:0,reception_stat:0,recip:1,recipi:6,recommend:[0,1,6],reconstruct:6,record:[1,6],recoveri:3,recreat:6,refer:[0,1,2],regard:6,regist:[0,5],register_announce_handl:[0,5],register_request_handl:[0,5],rel:[6,8],relai:1,relat:1,releas:[1,3,6],relev:[0,3,5],reli:6,reliabl:[3,4,6,8],rem:0,remain:6,rememb:6,remot:[0,5],remote_ident:[0,5],remote_identifi:0,remote_identity_hash:[],remote_p:0,remotesensor:6,repeat:1,replac:[1,6,7],repli:[0,7],replic:6,reply_data:0,reply_text:0,repositori:1,repres:6,represent:[0,6],request:[2,6,7],request_destin:0,request_fail:0,request_id:[0,5],request_packet:0,request_path:[0,5],request_receipt:[0,5],request_receiv:0,requested_at:[0,5],requestexampl:0,requestreceipt:5,requir:[0,1,3,4,6,7,8],research:8,resend:5,reserv:6,resili:8,resourc:[0,2],resource_callback:5,resource_sending_conclud:0,resource_strategi:5,respect:3,respond:[0,5],respons:[2,5],response_callback:[0,5],response_gener:[0,5],response_tim:[],rest:[4,8],restart:7,restartsec:7,result:[0,6],retain:3,reticulum:[0,3,4],retransmiss:6,retransmit:6,retri:6,reveal:[5,6,8],review:8,right:4,rn:[0,1,5,7],rnode:[2,6,8],rnodeinterfac:3,rnpath:[1,2],rnprobe:[1,2],rnsconfig:1,rnsd:[1,2],rnstatu:[1,2,3],robot:6,rotat:6,round:[0,5,7],rout:[1,3,4,5,6,8],router:3,rprogress:0,rsa:[],rssi:0,rtt:[0,5,6],rttstring:0,rule:6,run:[0,1,3,4,5,6,7,8],runtim:6,rust:1,rw:6,rx:[3,7],s:[0,1,3,4,6,7,8],said:6,same:[1,3,5,6,7],satisfi:6,save:[5,6],save_error:0,saved_filenam:0,scenario:[1,2,6],scope:3,screen:0,search:2,second:[0,3,5,6,8],secreci:[5,6,8],section:[3,4,6],secur:[6,8],see:[0,1,3,4,5,6,8],seen:6,segment:[3,4],segment_index:[],select:[0,3],self:[0,4,8],send:[0,3,5,6,7],sender:[0,1,4,6],sendig:0,sensibl:1,sensor:6,sent:[0,1,5,6,7],sentiment:6,separ:[3,4,6,7],sequenc:[0,5,6,8],serial:[2,6,8],serialinterfac:3,serv:[0,3,4,6],serve_path:0,server:[0,1,2],server_callback:0,server_destin:0,server_fil:0,server_ident:0,server_link:0,server_loop:0,server_packet_receiv:0,servic:[1,2,4],session:6,set:[0,1,3,4,5,6,7,8],set_default_app_data:5,set_delivery_callback:[0,5],set_link_closed_callback:0,set_link_established_callback:[0,5],set_packet_callback:[0,5],set_proof_requested_callback:5,set_proof_strategi:[0,5],set_remote_identified_callback:[0,5],set_resource_callback:5,set_resource_concluded_callback:[0,5],set_resource_started_callback:[0,5],set_resource_strategi:[0,5],set_timeout:[0,5],set_timeout_callback:[0,5],setdaemon:0,setup:[0,2,3],sever:[1,4,5,7],sha256:8,sha:[5,6],shall:6,share:[1,4,5,6,7],she:4,shelf:[6,8],shop:0,shorter:3,shortest:6,shorthand:[3,7],should:[0,1,3,4,5,6,8],should_allow_unencrypt:[],should_quit:0,should_use_implicit_proof:5,show:7,shown:0,side:8,sight:4,sign:[5,6],signatur:[5,6,8],significantli:[],similar:[1,3,4,7,8],simpl:[0,6,7,8],simpler:3,simplest:[3,6],simpli:[0,1,3,4,6,7],simplic:6,sinc:[0,1,3,4,5,6],singl:[0,3,5,6,8],singular:6,sit:[],site:[2,3],situat:[3,4,6],size:[0,1,5,6],size_str:0,sleep:[0,7],slice:0,slottim:[3,7],slow:[0,3,6],small:[0,3,4,6,8],snr:0,so:[0,1,3,4,5,6,7,8],softwar:[1,3,6,8],some:[0,1,3,4,6,7],someon:3,someth:6,somethign:0,soon:5,sort:[3,6],soundmodem:3,sourc:[0,1,4,6,8],space:[0,4,8],span:6,special:[6,7],specif:[0,2,3,5,8],specifi:[0,1,3,4,5,7],spectrum:[3,6],speed:[3,7],split:0,sponsor:8,spread:3,spreadingfactor:3,squelch:3,ssid:3,stabl:[6,8],stack:[0,1,4,6,7,8],stage:6,stai:[0,7],standard:[1,6],start:[0,2,3,5,6,7],startlimitintervalsec:[],startup:0,state:0,station:[3,6],stationari:4,statist:0,statu:[0,1,2,3,5,6,7],stdout:0,step:1,still:[0,4,6],stock:0,stop:8,stopbit:[3,7],store:[0,6],store_tru:0,str:0,strategi:5,stream:6,strength:8,strictli:6,string:[0,5],strong:6,structur:6,subject:[],subnet:4,subsequ:6,succe:1,successful:5,successfulli:0,sucessfulli:6,sudo:[1,7],suffic:6,suffici:[6,7],suffix:0,suit:[1,6],suitabl:[0,3,4,6],suppli:[4,5,6],support:[0,2,4,6,8],sure:[1,7],sy:0,symlink:[1,7],symmetr:[5,6],system:[0,1,2,3,5,8],systemctl:7,systemd:7,t:[0,1,3,4,6],tabl:[4,6],tail:3,take:[0,1,3,6,8],taken:[0,6],tangerin:0,target:[0,7],target_host:[1,3],target_port:[1,3],tcp:[1,2,4,6,8],tcpclientinterfac:[1,3],tcpinterfac:7,tcpserverinterfac:[1,3],tdata:0,teardown:[0,5],teardown_reason:0,teffect:0,tell:[0,3],temperatur:6,ten:6,term:[4,6],termin:[1,5],terminolog:[4,6],termux:1,test:[3,6],testnet:[1,7],text:[0,4,6],tfile:0,than:[0,1,4,6],thei:[0,4,5,6],them:[0,3,6],thereaft:6,therefor:[6,8],thi:[0,1,2,3,4,5,6,7],those:4,though:6,thourough:8,thread:0,three:[4,6],throough:3,throttl:4,through:[1,3,4,5,6,8],throughout:6,throughput:[6,8],thu:[4,5,6],ti:[0,6],time:[0,1,3,4,5,6,7],timeout:[0,5],timeout_callback:[],timeoutarg:0,timestr:0,tnc:[3,5,7,8],to_fil:5,todai:6,todo:[],togeth:6,token:[5,6],too:[0,4,6],tool:8,top:[4,6],topic:6,topographi:4,topolog:[3,6],total:[6,8],total_s:0,touch:8,toward:[0,6],tradit:4,traffic:[0,1,3,4,5,6],tramsit:[],transceiv:[3,6,8],transfer:[0,5,6,8],transfer_s:0,transmiss:[1,3,6],transmit:[0,3,6],transpar:[3,6],transpor:3,transport:[0,2,4,7,8],transport_en:5,transport_id:[],transport_typ:[],travers:6,treat:6,tri:0,trip:[0,5,7],trivial:8,truli:6,truncat:[5,6],truncated_hash:5,truncated_hashlength:5,trust:6,trustless:[6,8],ttime:0,ttransfer:0,ttyusb0:[3,7],ttyusb1:3,ttyusb2:3,tun0:3,tunnel:[3,6,8],tupl:5,turnaround:3,tutori:1,two:[0,1,3,4,6],tx:[3,7],txpower:3,txtail:[3,7],type:[0,1,2,3,4,5,7],typeerror:5,ubuntu:7,udp:[2,4,6,7,8],udpinterfac:[3,7],umsgpack:0,uncencrypt:0,under:7,underli:[4,8],understand:[1,2],unencrypt:[0,5,6],unequivoc:6,unforg:8,unidentifi:0,unifi:4,uninterest:0,uniqu:[6,8],unit:[0,7],unknown:[0,5,6],unless:[1,3,5,6],unlicens:6,unpack:0,unpackb:0,unplug:7,unreli:3,unsign:[1,7],unsupport:5,until:[0,5,6],unwant:6,up:[0,1,3,4,6,7,8],updat:[0,1,5],upgrad:1,upon:[0,6],upset:0,urandom:8,us:[0,2,3,4,5,6],usabl:6,usag:7,usb:[4,6,7,8],useabl:6,user:[0,1,3,4,6,7],user_input:0,userland:8,usernameher:7,usr:7,utf:0,util:[0,2,3,6],utilis:[4,6,7,8],v:7,valid:[0,3,5,6,7],valu:[3,5,6],valueerror:[0,5],vari:7,variabl:0,varieti:[3,6,8],variou:[0,3,6],ve:1,vendor:0,verbos:7,veri:[1,4,5,6,7,8],verif:[5,6],verifi:[0,5,6],versa:[4,8],version:7,vhf:[4,6],via:[1,3,6,7],vice:[4,8],view:[1,6,7],virtual:4,visibl:0,wa:[0,3,4,5,6,8],wai:[0,1,3,4,6],wait:[0,6],want:[0,1,3,4,6,7,8],wantedbi:7,warrant:8,wast:3,wb:0,we:[0,1,3,6],websit:3,well:[3,4,5,6,8],went:0,were:4,what:[0,1,2,5,6],whatev:[5,6],wheel:1,when:[0,1,3,4,5,6,7],whenev:5,where:[2,3,4,5,6,7],whereupon:6,whether:[0,3,5,6],which:[0,1,3,4,5,6,7],who:6,wide:[3,6,8],wifi:[3,4,6,7,8],wildcard:0,willing:4,window:6,wire:[3,6,8],wireless:4,wish:6,within:[0,1,3,4,5,6],without:[4,6,8],wlan0:3,won:0,work:[1,6,7,8],world:[4,8],worri:4,would:[3,4,6],write:[0,1,5],written:6,wrong:0,x25519:[5,6,8],x:6,xenon:0,y:0,ye:[1,3,6],year:6,yet:[0,3,6],yi:0,ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha:1,you:[0,1,2,3,4,5,6,7,8],your:[0,1,2,3,4,6,8],yourself:[6,8],z:0,zero:[5,8],zeromq:4,zi:0},titles:["Code Examples","Getting Started Fast","Reticulum Network Stack Manual","Supported Interfaces","Building Networks","API Reference","Understanding Reticulum","Using Reticulum on Your System","What is Reticulum?"],titleterms:{"1":[],"2":[],"25":3,"class":5,"function":6,"public":6,"try":1,The:[6,7],With:1,android:1,announc:[0,6],api:5,arm64:1,auto:3,ax:3,base:1,basic:6,binari:6,bridg:[1,4],broadcast:0,build:4,can:8,caveat:8,client:3,code:0,common:3,concept:4,configur:7,converg:4,creat:1,current:8,deliveri:[],destin:[5,6],detail:6,develop:1,devic:8,doe:8,echo:0,emptor:8,establish:6,exampl:[0,4],fast:1,filetransf:0,fix:7,format:6,further:6,get:[1,6],gipsum:[],goal:6,growth:4,i2p:3,ident:[5,6],identif:0,improv:7,includ:[1,7],indic:2,interconnect:4,interfac:[3,8],internet:[1,4],introduct:6,kei:6,kiss:3,link:[0,5,6],lora:[3,4],manual:2,mechan:6,minim:0,motiv:6,name:[6,7],network:[1,2,4],node:6,offer:8,option:3,orem:[],over:[1,4],overview:4,packet:[5,6],particip:1,pathfind:[],port:7,predict:[],prioritis:6,program:[1,7],protocol:6,proven:[],reach:6,receipt:5,refer:[5,6],request:[0,5],resourc:[5,6],respons:0,reticulum:[1,2,5,6,7,8],rnode:3,rnpath:7,rnprobe:7,rnsd:7,rnstatu:7,run:[],scenario:4,serial:[3,7],server:3,servic:7,setup:6,site:4,specif:6,stack:2,start:1,statu:8,step:[],support:3,system:[6,7],tabl:2,tcp:3,transport:[5,6],type:[6,8],udp:3,understand:6,us:[1,7,8],util:[1,7],what:8,where:8,your:7}}) \ No newline at end of file +Search.setIndex({docnames:["examples","gettingstartedfast","index","interfaces","networks","reference","understanding","using","whatis"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"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:56},filenames:["examples.rst","gettingstartedfast.rst","index.rst","interfaces.rst","networks.rst","reference.rst","understanding.rst","using.rst","whatis.rst"],objects:{"RNS.Destination":{announce:[5,1,1,""],app_and_aspects_from_name:[5,1,1,""],clear_default_app_data:[5,1,1,""],create_keys:[5,1,1,""],decrypt:[5,1,1,""],deregister_request_handler:[5,1,1,""],encrypt:[5,1,1,""],full_name:[5,1,1,""],get_private_key:[5,1,1,""],hash:[5,1,1,""],hash_from_name_and_identity:[5,1,1,""],load_private_key:[5,1,1,""],register_request_handler:[5,1,1,""],set_default_app_data:[5,1,1,""],set_link_established_callback:[5,1,1,""],set_packet_callback:[5,1,1,""],set_proof_requested_callback:[5,1,1,""],set_proof_strategy:[5,1,1,""],sign:[5,1,1,""]},"RNS.Identity":{CURVE:[5,2,1,""],KEYSIZE:[5,2,1,""],TRUNCATED_HASHLENGTH:[5,2,1,""],decrypt:[5,1,1,""],encrypt:[5,1,1,""],from_bytes:[5,1,1,""],from_file:[5,1,1,""],full_hash:[5,1,1,""],get_private_key:[5,1,1,""],get_public_key:[5,1,1,""],get_random_hash:[5,1,1,""],load_private_key:[5,1,1,""],load_public_key:[5,1,1,""],recall:[5,1,1,""],recall_app_data:[5,1,1,""],sign:[5,1,1,""],to_file:[5,1,1,""],truncated_hash:[5,1,1,""],validate:[5,1,1,""]},"RNS.Link":{CURVE:[5,2,1,""],ESTABLISHMENT_TIMEOUT_PER_HOP:[5,2,1,""],KEEPALIVE:[5,2,1,""],get_remote_identity:[5,1,1,""],identify:[5,1,1,""],inactive_for:[5,1,1,""],no_inbound_for:[5,1,1,""],no_outbound_for:[5,1,1,""],request:[5,1,1,""],set_packet_callback:[5,1,1,""],set_remote_identified_callback:[5,1,1,""],set_resource_callback:[5,1,1,""],set_resource_concluded_callback:[5,1,1,""],set_resource_started_callback:[5,1,1,""],set_resource_strategy:[5,1,1,""],teardown:[5,1,1,""]},"RNS.Packet":{ENCRYPTED_MDU:[5,2,1,""],PLAIN_MDU:[5,2,1,""],resend:[5,1,1,""],send:[5,1,1,""]},"RNS.PacketReceipt":{get_rtt:[5,1,1,""],get_status:[5,1,1,""],set_delivery_callback:[5,1,1,""],set_timeout:[5,1,1,""],set_timeout_callback:[5,1,1,""]},"RNS.RequestReceipt":{get_progress:[5,1,1,""],get_request_id:[5,1,1,""],get_response:[5,1,1,""],get_response_time:[5,1,1,""],get_status:[5,1,1,""]},"RNS.Resource":{advertise:[5,1,1,""],cancel:[5,1,1,""],get_progress:[5,1,1,""]},"RNS.Reticulum":{MTU:[5,2,1,""],should_use_implicit_proof:[5,1,1,""],transport_enabled:[5,1,1,""]},"RNS.Transport":{PATHFINDER_M:[5,2,1,""],deregister_announce_handler:[5,1,1,""],has_path:[5,1,1,""],hops_to:[5,1,1,""],next_hop:[5,1,1,""],next_hop_interface:[5,1,1,""],register_announce_handler:[5,1,1,""],request_path:[5,1,1,""]},RNS:{Destination:[5,0,1,""],Identity:[5,0,1,""],Link:[5,0,1,""],Packet:[5,0,1,""],PacketReceipt:[5,0,1,""],RequestReceipt:[5,0,1,""],Resource:[5,0,1,""],Reticulum:[5,0,1,""],Transport:[5,0,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"]},objtypes:{"0":"py:class","1":"py:method","2":"py:attribute"},terms:{"0":[0,3,5,6,7,8],"00":6,"000":[],"00000000":6,"00000100":6,"00000111":6,"01":[6,7],"01010000":6,"02":7,"05":0,"07":7,"1":[0,3,5,6,7],"10":[0,3,6,7],"100":[0,6],"1000":[0,6],"1024":0,"11":6,"115200":[3,7],"12":[3,6],"1200":6,"125":3,"125000":3,"127":3,"128":[5,6,8],"13":7,"14":6,"141":[],"15":[3,6],"150":[3,7],"150m":3,"151":6,"16":[3,7],"18":[],"180":6,"182":[],"2":[0,3,6,7],"20":[0,3,6,7],"200":[3,7],"2000000":[],"205":[],"211":[],"237":[6,8],"24":3,"240":[],"25":[0,2,8],"255":3,"256":[5,6],"270":[],"2f":0,"3":[0,6,7,8],"323":[],"33":6,"34":[],"360":5,"3600":0,"37":7,"37428":7,"38":7,"383":5,"3e12fc71692f8ec47bc5":1,"3w3lha":[],"4":[6,7],"409":[],"4242":[3,7],"430":6,"45":0,"469":7,"477":[5,6],"48555":3,"49555":3,"4965":[1,7],"5":[0,3,5,6],"500":[5,6,8],"5001":3,"512":5,"55":3,"56b115c30cd386cad69c":7,"5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq":3,"60":0,"600":3,"62":[6,8],"7":[3,6],"72":3,"77":6,"7ca6f4e4dc26ae329e61":[],"8":[0,3,7],"80":[5,6],"8001":3,"80e29bf7cccaf31431b3":6,"83":6,"86":[],"867":3,"867200000":3,"868":6,"88":3,"9":7,"900":6,"9382f334de63217a4278":7,"95":6,"\u00ec2pd":3,"abstract":6,"break":[5,6,8],"byte":[0,5,6,7,8],"case":[1,3,4,6,7],"class":[0,2,8],"default":[0,1,3,4,5,6,7],"do":[0,1,3,5,6,7,8],"export":1,"float":[0,5],"function":[0,1,2,3,4,5,8],"import":[0,1,3,4,6],"int":0,"long":[0,3,6],"new":[0,3,4,5,6],"public":[0,1,2,3,5],"return":[0,5],"short":[6,7],"static":[1,5],"switch":3,"throw":[],"true":[0,1,3,5,7],"try":[0,2],"while":[0,1,3,4,5,6,8],A:[0,1,3,4,5,6,8],And:0,As:[4,5,6,8],At:[4,6],Be:[5,7],But:6,By:[0,1,3,5,6],For:[1,3,4,5,6,8],IN:[0,5],If:[0,1,3,4,5,6,7,8],In:[0,1,3,4,5,6,7,8],It:[0,1,3,5,6,8],No:[6,8],On:[0,1,3,7],One:5,Or:[3,6],That:6,The:[0,1,2,3,4,5,8],Then:1,There:[1,4,6,8],These:[3,6,7],To:[0,1,3,4,6,7,8],Will:5,With:[2,3,4,6,7],_:6,__:6,______:6,_______:6,________:6,________________:6,__init__:0,__main__:0,__name__:0,_exit:0,aarch64:1,ab:0,abil:1,abl:[0,1,4,5,6,7],about:[0,1,3,4,5,6],abov:[1,3,6],absolut:[],accept:[5,6],accept_al:[0,5],accept_app:5,accept_non:5,access:[1,3,5,6,7],access_point:3,accord:6,accordingli:0,acheiv:[3,6],achiev:[5,6],acknowledg:8,across:4,act:[5,6],action:0,activ:[0,1,5,6],actor:6,actual:[0,1,3,6],ad:[0,2,4,5,8],adapt:4,add:[0,1,3,4,7],add_argu:0,addit:[6,8],addr1:6,addr2:6,address:[0,1,3,4,5,6,8],adher:5,admin:3,administr:7,adress:[0,1,4,5,8],advantag:5,adversari:1,advertis:[0,5],advis:6,ae:[6,8],after:[0,4,6,7],again:[1,3,6],against:6,agent:6,agnost:[4,6],agnostic:6,aim:[2,6],air:8,airtim:3,aliv:[5,6],all:[0,1,2,3,4,5,6,7,8],alloc:7,allow:[0,1,3,4,5,6,7,8],allow_al:[0,5],allow_list:5,allow_non:5,allowed_list:5,almost:[3,6],alo:6,along:[4,6],alreadi:[0,4,6],also:[0,1,3,4,5,6,7,8],alter:6,altern:[0,3,7],although:8,alwai:[1,5,6,7],amateur:[3,8],amet:[],amount:[3,4,5,6,8],an:[0,1,3,4,5,6,7,8],android:2,ani:[0,1,3,4,5,6,7,8],announc:[2,3,5],announce_handl:0,announced_ident:[0,5],announceloop:0,announcesampl:0,anonym:[1,4,5,6,8],anoth:[1,5,6,7],answer:[6,7],anyon:[0,4,5,6],anyth:[3,6],anywher:[0,3],ap:3,apart:6,api:[1,2,6,8],apk:1,app:[0,1,5,6],app_and_aspects_from_nam:5,app_data:[0,5],app_nam:[0,5],app_timeout:0,append:[0,6],appli:6,applic:[0,5,6,7],approach:7,approv:6,approxim:6,apt:1,ar:[0,1,3,4,5,6,7,8],arbitrari:[5,6],arbritrari:8,architectur:1,area:[3,4,8],arg:0,argon:0,argpars:0,argument:[0,5,7],argumentpars:0,arm64:2,around:6,arriv:[0,6],ask:[0,5],aspect:[0,3,5,6],aspect_filt:[0,5],assign:[6,7],associ:[1,5,6],assum:[3,6],asymmetr:8,attached_interfac:[],attack:1,attempt:5,attribut:5,audit:8,authent:[5,6,8],author:6,auto:[2,5,6],auto_compress:5,autoconfigur:[3,8],autodiscov:3,autointerfac:3,autom:6,automat:[0,1,3,4,5,6,7,8],autonom:[4,6],autoomat:0,avail:[0,1,3,4,6,7,8],availadbl:[],averag:6,avoid:[6,7],awai:[0,4,6,7],awar:6,ax25kissinterfac:3,ax:[2,8],b32:[1,3],b:[0,4],back:[0,6,8],background:[1,3],backhaul:4,band:6,bandwidth:[1,3,4,6,8],bare:0,barrier:6,base32:3,base:[2,3,4,5,6,7,8],basi:[5,6,8],basic:[0,1,2],baud:[3,6],beacon:3,beam:[],becaus:[1,4,6],becki:0,becom:[0,1,4],been:[0,3,4,5,6,8],befor:[0,1,5,6,7],begin:[0,5],begun:5,behaviour:3,behind:6,being:[3,5,6],belief:6,below:[1,3],benefici:7,best:[1,6,8],beta:8,better:3,between:[0,3,4,5,6],bgp:6,bi:6,bidirect:6,billion:4,bin:7,binari:[0,1,2],bind:3,bit:[5,6,8],blob:[0,6],block:3,board:[1,8],boot:7,both:[1,3,4,5,6,8],bp:6,bridg:2,briefli:6,bring:3,broadcast:[1,2,3,5,6],broadcast_destin:0,broadcastloop:0,brought:[3,7],buffer:3,bug:8,build:[0,1,2,3,6,8],built:[1,6,8],bundl:0,c:[0,4,6],cabl:4,cad:6,calcul:[5,6],call:[0,4,5,6,8],callabl:5,callback:[0,5],callsign:3,can:[0,1,2,3,4,5,6,7],cancel:5,candid:4,cannot:0,capac:6,carambola:0,care:[1,5,8],carefulli:1,cargo_build_target:1,carri:[5,6],carrier:[4,8],caution:3,caveat:2,cb:6,cbc:8,cd:1,cdma:3,censor:6,censorship:6,central:[4,6],certain:[0,3,4,6],challeng:6,chang:[0,1,3,5,6,7,8],channel:[0,3,4,6,8],channelarg:0,chapter:[1,3,4,6,8],charact:0,characterist:6,cheap:6,check:[0,1,5],checksum:[5,8],choos:[0,1,3],chose:6,chosen:4,chunk:0,ciphertext:5,ciphertext_token:5,cl:0,clear:[0,5,6],clear_default_app_data:5,clear_screen:0,client:[0,1,2,5],client_connect:0,client_disconnect:0,client_ident:0,client_loop:0,client_packet_receiv:0,client_request:0,clone:1,close:[0,5],closed_callback:5,closer:6,cluster:6,code:[1,2,3,6],codingr:3,com:[0,1],combin:[4,6],come:[1,6],comma:3,command:[0,1,7],comment:3,common:[1,2,6],commun:[0,1,3,4,5,6,7,8],compat:[1,3,5,6],compil:1,complet:[0,1,4,5,6,8],complex:6,compon:6,compos:6,compress:[0,5,6],comput:[1,6,8],concaten:5,concept:[2,6],conclud:[0,5],concurr:[6,7],condit:6,config:[0,1,4,7],configarg:0,configdir:5,configpath:0,configur:[0,1,2,3,4,5,6,8],confirm:[6,8],conjunct:3,connect:[0,2,3,4,5,6,7,8],consequ:[],consid:[6,8],consider:1,consist:6,constant:[5,6],construct:6,consumpt:6,contact:6,contain:[0,4,5,6],content:[4,7],context:6,control:[0,1,3,4,5,6],conveni:0,convent:0,converg:2,coordin:[4,5,6,8],core:[4,6,8],correct:[0,6],correctli:0,correspond:6,cost:[6,8],could:[0,3,4,5,6,8],count:6,counter:0,cours:3,cover:8,coverag:4,cpu:0,creat:[0,2,3,5,6,7],create_kei:5,create_receipt:[0,5],creation:6,creator:6,critic:6,cryptograph:[1,4,8],cryptographi:[1,6,8],ctrl:0,cull:5,current:[0,1,2,3,5,6],current_download:0,current_filenam:0,curv:[4,5,6,8],curve25519:[4,5,6,8],custom:[5,6],custom_network_nam:3,d:[4,6],daemon:[1,3,5,7],dai:4,data:[0,1,3,4,5,6,8],data_port:3,databit:[3,7],date:[0,1],db:0,dbm:[0,3],debian:[6,7],debug:[],decai:6,decid:[4,5,6],decod:0,decrypt:[5,6],dedic:6,deep:1,def:0,default_timeout:[],defin:[0,3,6],definit:6,degrad:4,degre:3,delai:[6,7],deliv:[0,5],deliveri:[0,5,8],demand:5,demonstr:[0,3],depend:[1,4,7],deploi:6,deregist:5,deregister_announce_handl:5,deregister_request_handl:5,deriv:[6,8],describ:[3,5,6],descript:[0,7],design:[4,6,8],desir:[0,3,6],destin:[0,1,2,3,4,7],destination_1:0,destination_2:0,destination_clos:0,destination_hash:[0,5,7],destination_hexhash:0,detail:[0,1,2,3,5,7,8],detect:0,determin:[1,5,6],dev:[1,3,7],develop:[2,6,8],devic:[1,2,3,4,5,6,7],dh:5,dhcp:3,did:0,differ:[0,1,3,4,5,6,7,8],diffi:[4,6,8],difficult:1,digit:[6,8],dir:0,direct:[0,1,4,5,6],directli:[3,5,6,7,8],directori:[0,7],disabl:3,disable_encrypt:[],disappear:3,discard:6,disconnect:0,discov:1,discover:3,discoveri:[3,6,7],discovery_port:3,discovery_scop:3,discrimin:4,discuss:6,disk:[0,5],displai:[0,6],distanc:6,distinct:[3,6],distinguish:6,distribut:[0,1,4,5,6,7],divmod:0,document:6,doe:[0,1,2,3,4,5,6],doesn:3,dolor:[],domain:[1,3],don:[0,1,4],done:[0,1,4,6],dori:4,dot:[6,7],down:0,downgrad:[],download:[0,3],download_began:0,download_conclud:0,download_finish:0,download_start:0,download_tim:0,driver:[7,8],droid:1,drop:6,due:4,duplex:[6,8],dynam:7,e:[0,4],each:[0,1,4,6],earlier:6,eas:[3,6],easi:[3,6,7,8],easier:[1,4,7],easiest:[1,3,6],easili:[6,7,8],eca6f4e4dc26ae329e61:7,ecdh:[6,8],echo:[1,2,7],echo_destin:0,echo_request:0,ed25519:[6,8],edit:1,effici:[0,1,3,6,8],ei:0,either:[3,4,6],elaps:3,elif:0,ellipt:[4,5,6,8],els:[0,4,6],emploi:6,emptor:2,emul:1,enabl:[3,4,5,6,7],enable_transport:6,encapsul:[3,8],encod:0,encrypt:[0,1,4,5,6,8],encrypted_mdu:5,encryptionless:[],end:[0,4,5,6,8],endless:3,endpoint:[0,4,5,6],energi:1,engin:[],enough:1,ensur:6,enter:0,entir:[4,6],entiti:6,entri:[0,6],enumer:0,environ:[1,6],environment:6,environmentlogg:6,ephemer:[4,5,6,8],equal:[4,6],equip:[4,6],equival:3,equl:[],error:[0,1],especi:3,essenti:[1,6],establish:[0,3,5,8],established_callback:5,establishment_timeout_per_hop:5,etc:7,eth0:3,eth1:3,ethernet:[1,3,4,6,8],even:[4,6,7,8],event:3,everi:[0,3,4,5,6],everyon:[4,6],everyth:[0,4,6],evolv:4,exact:6,exactli:[5,6],exampl:[1,2,3,5,6,7,8],example_util:[0,7],exampleannouncehandl:0,exce:0,except:[0,3,6],exchang:[4,5,6,8],execstart:7,execstartpr:7,execut:[0,1,5,7],exhaust:6,exist:[0,1,3,6,8],exit:[0,1,5,7],exit_handl:0,expand:6,expect:[0,3,5,6,7],experi:[1,6],experiment:[1,8],expiri:3,explain:5,explan:6,explicit:5,explicitli:[],explor:[0,6,8],expos:[3,5],extend:[0,1,6],extern:[1,3,5,8],extra:[1,3,4,7],extrem:8,f:1,fa7ddfab5213f916dea:6,face:1,fact:[6,8],factor:3,fail:[0,5],failed_callback:[0,5],fals:[0,3,5],far:[4,6],fast:2,faster:1,fastest:3,featur:[1,6,8],feed:5,feedback:0,fernet:8,few:[1,3,4,6,7,8],field:6,file:[0,1,3,4,5,6,7,8],file_resourc:0,file_s:0,filelist:0,filelist_data:0,filelist_receiv:0,filelist_timeout_job:0,filenam:0,filetransf:[1,2,5],filter:[0,4,6],find:[4,6],firewal:3,firmwar:[1,6],first:[0,1,3,5,6],fit:0,five:0,fix:[2,6],flag:[5,6],flexibl:3,flow:[3,4],flow_control:3,flush:0,folder:1,follow:[0,1,3,6,7,8],forcibl:5,foreground:1,foremost:8,form:[1,3,4,5,6],format:[0,2,8],forth:0,forward:[3,5,6,8],forward_ip:3,forward_port:3,found:[0,1,4,6,7],four:4,frame:3,frankfurt:[1,7],free:8,frequenc:[3,6],frequent:3,friendli:8,from:[0,1,3,4,5,6,7,8],from_byt:5,from_fil:5,fromhex:0,fruit:0,ftdi_ft230x_basic_uart_43891ckm:7,full:[0,3,5,6,7,8],full_hash:5,full_nam:[5,7],fulli:[1,6,8],funcion:5,fundament:6,further:[1,2],futur:[4,6],g:0,ga:0,gatekeep:6,gatewai:4,gen:[],gener:[0,1,3,4,5,6,8],generalis:8,geograph:4,get:[0,2,3,5,8],get_packet_rssi:0,get_packet_snr:0,get_private_kei:5,get_progress:[0,5],get_public_kei:5,get_random_hash:[0,5],get_remote_ident:[0,5],get_request_id:5,get_respons:5,get_response_tim:5,get_rtt:[0,5],get_statu:5,geti2p:3,gi:0,gigabyt:8,gipsum:[],git:1,github:[0,1],give:[3,6],given:[4,6],global:[0,3,4,8],go:[0,1,6],goal:[2,3],good:[4,6],got:0,got_respons:0,govern:6,grape:0,graphic:1,great:6,greater:6,greatli:3,group:[3,5,6],group_id:3,grow:4,growth:2,guarante:6,guid:[1,5,6],h:[1,6,7],ha:[0,3,4,5,6,8],had:6,half:[6,8],hand:[0,1],handheld:6,handl:[0,3,4,5,6,7,8],handler:[0,5],happen:[0,5],hardlin:4,hardwar:[1,3,4,5,6,8],has_path:[0,5],hasattr:0,hash:[0,1,5,6,7],hash_from_name_and_ident:5,hashmap:0,have:[0,1,3,4,5,6,7],hazard:5,header:6,header_1:6,header_2:6,header_typ:[],hear:6,heard:[5,6],helium:0,hellman:[4,6,8],help:[0,4,6,7,8],her:4,here:[0,1,3,6,7],hexadecim:[0,6,7],high:[3,6,8],higher:[6,8],highli:6,hill:4,hint:0,hit:0,hmac:8,hoc:8,hold:[5,6],home:4,homebrew:3,hop:[4,5,6,7,8],hops_to:5,host:[0,1,3,6,7,8],hostnam:3,hour:0,how:[0,1,3,4,6,8],howev:[1,4,6],http:[0,1],hub:3,human:[0,5],i2p:[1,2],i2p_tunnel:3,i2pd:1,i2pinterfac:[1,3],i:0,id:[3,5,6,7],id_callsign:3,id_interv:3,idea:6,ideal:[],ident:[0,1,2,8],identif:[2,3,8],identifi:[0,3,5,6],identify:6,identifyexampl:0,ie:[],if00:7,ifconfig:7,ignor:[3,5,6],ignored_devic:3,illustr:4,immedi:[1,7],impact:6,implement:[0,4,5,6,8],implic:3,implicit:[5,6],improv:[2,3],inactive_for:5,inbound:[3,5],includ:[0,2,3,5,6],incom:[0,3,5],incompat:[5,6],increas:[3,6],incur:3,indefinit:6,independ:5,independt:8,index:[0,1,2],indirectli:6,individu:6,inevit:6,infer:6,info:[5,6],inform:[0,1,2,4,5,6],infrastructur:[3,4,6],ingo:5,initi:[0,4,5,6,8],initialis:[0,5,7],input:0,insert:6,inspect:[1,3,4],instal:[1,3,4,7],instanc:[0,2,3,5,6,7],instanti:5,instead:[0,3,6,7],integr:[4,6],intend:[4,6],intention:6,inter:5,interact:[0,1,5,6],interchang:3,interconnect:2,interest:6,interfac:[0,2,4,5,6,7],interface_en:[1,3,7],interface_mod:3,intermitt:3,intern:[3,5,6],internet:[2,3,6,8],interv:[3,5],intiat:0,introduc:6,introduct:2,intuit:8,invalid:[0,5],investig:4,invis:[1,3],involv:4,io:[1,7],ip:[1,3,6,8],ipsum:[],ipv6:3,is_connected_to_shared_inst:0,is_request:[],is_respons:[],isdir:0,isfil:0,island:4,ism:6,isol:3,its:[5,6],itself:[2,6],iv:8,job:0,join:[0,1,6],just:[0,3,4,6,8],k:0,kb:7,kbp:6,keep:[0,4,5,6,7,8],keepal:[5,6],kei:[0,1,2,4,5,8],kept:[3,4,5,6],kernel:[3,7,8],keyboardinterrupt:0,keyerror:5,keypair:6,keysiz:5,keystor:4,khz:3,ki:0,kill:5,kilomet:6,kind:[3,4,6],kiss:[2,7],kiss_fram:3,kissinterfac:[3,7],know:[0,1,4,5,6],knowledg:[4,6],known:[0,5,6],krypton:0,lack:6,laid:6,lan:3,larg:[0,4,6],larger:6,laser:3,last:[0,3,5],last_unit:0,latenc:[1,6,8],later:[0,1],latest:[0,1,3],latest_client_link:0,launch:1,lavg:[],layer:[3,4,6,8],lead:6,leak:1,learn:[0,1,6],least:[3,6,8],leav:[4,6],ledger:6,left:[5,6],len:0,length:[0,5],less:[3,6,8],let:[0,1,3,4,6,7],level:[3,6],libffi:1,librari:1,licens:6,light:[],like:[1,3,5,6,7,8],limit:6,line:[0,1,4,6,8],link:[2,3,4,8],link_clos:0,link_establish:0,linkexampl:0,linux:[1,6],list:[0,3,5,6,8],list_deliv:0,list_fil:0,list_packet:0,list_receipt:0,list_timeout:0,listdir:0,listen:[0,3,6],listen_ip:3,listen_port:3,littl:6,lki:6,lkr:6,ll:[0,1,8],ln:[1,7],load:[0,5,7],load_private_kei:5,load_public_kei:5,local:[0,1,3,4,5,6,7,8],locat:[1,4,6,7],log:[0,3],log_error:0,log_info:0,loglevel:[0,5],longer:[0,4,6],longest:3,look:[0,1,3,6,7],loop:0,lora32:[],lora:[1,2,6,8],lorawan:6,lorem:[],lot:6,low:[3,4,6,8],lower:1,lxmf:1,m:[0,1,6,7],mac:6,machin:6,maco:1,made:[5,6],mai:[1,3,6],main:0,mainli:4,maintain:6,make:[1,6,7],malici:6,manag:[1,5],mani:[0,1,3,4,6,7,8],manipul:6,manual:[0,1,3,4,5,7],mark:6,markqvist:[0,1],master:[0,5],match:[0,3],maximum:5,mcu:6,mdu:0,mean:[6,7],measur:6,mechan:[2,3],medium:[3,4,6,8],member:4,memori:6,mention:6,menu:0,menu_mod:0,mesh:[1,3,4,8],messag:[0,1,5,6,7],messeng:6,metadata:1,metavar:0,method:[0,1,3,5,6],methodolog:[6,7],mhz:[3,6],mi:0,microcontrol:6,microwav:6,might:[1,3,4,6,7],millisecond:[0,7],mind:[4,8],minim:[2,6],minimalsampl:0,minimum:[0,4,6],minut:[0,1,3,6],mix:[3,4,7],mode:[0,1,3,6,8],modem:[3,4,5,6,8],modul:[0,1,6,7,8],moment:[6,8],momentarili:3,monitor:6,moon:0,mor:[],more:[1,3,4,5,6,8],most:[1,3,4,6,7,8],mostli:3,motiv:2,move:1,mqtt:4,mtu:[5,6,8],much:[1,3,6],multi:[6,7,8],multicast:3,multilater:6,multipl:[0,3,4,6,7],multipoint:6,must:[0,1,3,4,5,6],mw:3,my:6,mycal:3,n:0,name:[0,2,4,5],namespac:0,nano:1,narg:0,natur:3,necesarri:4,necessari:[1,5,6],necessarili:6,need:[0,1,2,3,4,6,7,8],neglig:6,neither:6,neon:0,net:3,netifac:1,network:[0,3,5,6,7,8],never:[3,5],newer:6,newest:6,newli:[4,6],next:[1,4,5,6],next_hop:5,next_hop_interfac:5,nicknam:6,no1cll:3,no_inbound_for:5,no_outbound_for:5,nobl:0,noble_ga:0,noble_gas:0,node:[1,2,3,4,7,8],nomad:1,nomadnet:1,non:[1,5,6],none:[0,3,5,6,7],normal:0,notat:[6,7],note:[0,1,3,6,7],noth:8,notic:6,notif:[0,5],now:[0,1,4,6,7],nt:0,num:0,number:[0,1,3,4,5,6,7],obfusc:1,object:5,obtain:6,occur:8,off:[6,8],offer:[1,2,3,5,6],often:[4,6,7],oganesson:0,old:6,onc:[0,1,4,5,6,8],one:[0,1,3,4,5,6,7,8],ones:3,oneself:6,onli:[0,1,3,4,5,6,7,8],onlin:[],open:[0,3,5,6,7,8],openmodem:[3,8],openssl:1,oper:[3,4,5,6,8],opt:6,optic:8,optim:4,optimis:6,option:[0,1,2,4,5,7],order:7,orem:[],organis:[3,4],orient:6,origin:[0,4,6],original_hash:[],os:[0,3,6,7,8],ospf:6,other:[1,3,4,5,6,7],otherwis:5,our:[0,6],out:[0,3,4,5,6,8],outbound:5,outgo:[0,1,3,5,6,7],outli:4,outlier:4,outlin:[1,6],output:[3,7],outward:6,over:[0,2,3,5,6,7,8],overal:6,overcom:6,overhead:[3,6],overrid:0,overview:[2,3,6],own:[0,1,4,5,6],owner:[],p:[0,6],pack:0,packag:[1,3],packb:0,packet:[0,1,2,3,4,7,8],packet_callback:0,packet_deliv:0,packet_hash:0,packet_receipt:[0,5],packet_timed_out:0,packet_typ:[],packetreceipt:[0,5],pad:8,page:[2,6],pair:[3,6],palm:[],parallel:1,paramet:[3,4,5],pariti:[3,7],pars:0,parse_arg:0,parser:0,part:[0,4,6],particip:[2,6],pass:[0,3,4,5,6],past:[],path:[0,1,3,5,6,7],path_respons:5,pathfind:[],pathfinder_m:5,pattern:6,payload:[5,6],peach:0,peer:[0,1,3,5,6],peer_pub_byt:[],peer_sig_pub_byt:[],peopl:6,per:[5,6,8],percent:0,perfect:[],perform:[0,1,3,4,6],period:[3,6],perman:7,persecut:6,persist:[3,7],person:6,pet:0,philosophi:6,physic:[3,6,7],pi:[0,4,6,7,8],piec:6,ping:[1,7],pip3:[1,7],pip:[1,7],pkcs7:8,pkg:1,place:[4,6,7],plain:[0,3,5,6],plain_mdu:5,plaintext:[0,5],plan:4,platform:[1,6],pleas:[0,1,3,7,8],plenti:6,plu:6,plug:7,pmr:6,point:[1,3,4,6],pomelo:0,poorli:4,port0:7,port:[2,3,4,6,8],portabl:3,posit:7,possess:6,possibl:[1,3,4,5,6,8],potenti:[0,3,6,7],power:[1,3],practic:[6,8],pre:[1,3,5,6],preambl:[3,7],precompil:1,predict:6,prefer:6,prepar:[0,4],prerequisit:5,presenc:5,preserv:[1,5],press:0,pretend:6,pretti:6,prettyhexrep:0,previou:0,previous:[4,5,6],primari:6,principl:[6,8],print:[0,3],print_filelist:0,print_help:0,print_menu:0,prioriti:6,prioritis:[2,4],privaci:8,privat:[1,3,5,6,8],privileg:7,probabl:[0,4,6,7,8],probe:7,procedur:6,process:[1,3,5,6],product:[],program:[0,2,3,5,6],program_setup:0,programm:6,programmat:6,progress:[0,5,8],progress_callback:5,project:1,prompt:0,proof:[0,5,6,7],proof_packet:0,proof_requested_callback:5,proof_strategi:5,propag:6,properli:1,properti:5,protocol:[1,2,3,8],prove:[0,6],prove_al:[0,5],prove_app:5,prove_non:5,proven:[5,6],provid:[0,1,2,3,4,5,6,8],prv_byte:5,pub_byt:5,public_inform:0,publicli:[],purchas:[4,6,8],purg:5,purpos:[3,5,6],purposefulli:6,put:0,py:[0,1,7],pyseri:1,python3:[1,7],python:[1,6,7,8],q:[0,7],queri:[0,1],queue:6,quiet:[3,7],quinc:0,quit:0,r:[0,6],radio:[2,3,4,5,6,7,8],radiu:6,radon:0,rais:[0,5],ram:3,rand:6,randint:0,random:[0,5,6],random_text_gener:0,randomli:[0,6],rang:[0,1,3,4,6,8],raspberri:[4,6,7,8],rate:[0,3],rather:1,rb:0,re:[0,3,5,6],reach:[2,3,4],reachabl:[0,3,4,5,6],read:[0,1,6],readabl:[0,5,6],readi:[0,1,3,4,5],readili:8,real:[4,6,8],realli:[3,5],reason:[3,6],reassembl:6,reboot:1,recal:[0,5],recall_app_data:5,recap:6,receipt:[0,2,6],receiv:[0,1,3,5,6,7],received_announc:[0,5],reception_rssi:0,reception_snr:0,reception_stat:0,recip:1,recipi:6,recommend:[0,1,6],reconstruct:6,record:[1,6],recoveri:3,recreat:6,refer:[0,1,2],regard:6,regist:[0,5],register_announce_handl:[0,5],register_request_handl:[0,5],rel:[6,8],relai:1,relat:1,releas:[1,3,6],relev:[0,3,5],reli:6,reliabl:[3,4,6,8],rem:0,remain:6,rememb:6,remot:[0,5],remote_ident:[0,5],remote_identifi:0,remote_identity_hash:[],remote_p:0,remotesensor:6,repeat:1,replac:[1,6,7],repli:[0,7],replic:6,reply_data:0,reply_text:0,repositori:1,repres:6,represent:[0,6],request:[2,6,7],request_destin:0,request_fail:0,request_id:[0,5],request_packet:0,request_path:[0,5],request_receipt:[0,5],request_receiv:0,requested_at:[0,5],requestexampl:0,requestreceipt:5,requir:[0,1,3,4,6,7,8],research:8,resend:5,reserv:6,resili:8,resourc:[0,1,2],resource_callback:5,resource_sending_conclud:0,resource_strategi:5,respect:3,respond:[0,5],respons:[2,5],response_callback:[0,5],response_gener:[0,5],response_tim:[],rest:[4,8],restart:7,restartsec:7,result:[0,6],retain:3,reticulum:[0,3,4],retiiculum:[],retransmiss:6,retransmit:6,retri:6,reveal:[5,6,8],review:8,right:4,rn:[0,1,5,7],rnode:[1,2,6,8],rnodeinterfac:3,rnpath:[1,2],rnprobe:[1,2],rnsconfig:1,rnsd:[1,2],rnstatu:[1,2,3],robot:6,rotat:6,round:[0,5,7],rout:[1,3,4,5,6,8],router:3,rprogress:0,rsa:[],rssi:0,rtt:[0,5,6],rttstring:0,rule:6,run:[0,1,3,4,5,6,7,8],runtim:6,rust:1,rw:6,rx:[3,7],s:[0,1,3,4,6,7,8],said:6,same:[1,3,5,6,7],satisfi:6,save:[5,6],save_error:0,saved_filenam:0,scenario:[1,2,6],scope:3,screen:0,search:2,second:[0,3,5,6,8],secreci:[5,6,8],section:[1,3,4,6],secur:[1,6,8],see:[0,1,3,4,5,6,8],seen:6,segment:[3,4],segment_index:[],select:[0,3],self:[0,4,8],send:[0,3,5,6,7],sender:[0,1,4,6],sendig:0,sensibl:1,sensor:6,sent:[0,1,5,6,7],sentiment:6,separ:[3,4,6,7],sequenc:[0,5,6,8],serial:[2,6,8],serialinterfac:3,serv:[0,3,4,6],serve_path:0,server:[0,1,2],server_callback:0,server_destin:0,server_fil:0,server_ident:0,server_link:0,server_loop:0,server_packet_receiv:0,servic:[1,2,4],session:6,set:[0,1,3,4,5,6,7,8],set_default_app_data:5,set_delivery_callback:[0,5],set_link_closed_callback:0,set_link_established_callback:[0,5],set_packet_callback:[0,5],set_proof_requested_callback:5,set_proof_strategi:[0,5],set_remote_identified_callback:[0,5],set_resource_callback:5,set_resource_concluded_callback:[0,5],set_resource_started_callback:[0,5],set_resource_strategi:[0,5],set_timeout:[0,5],set_timeout_callback:[0,5],setdaemon:0,setup:[0,1,2,3],sever:[1,4,5,7],sha256:8,sha:[5,6],shall:6,share:[1,4,5,6,7],she:4,shelf:[6,8],shop:0,shorter:3,shortest:6,shorthand:[3,7],should:[0,1,3,4,5,6,8],should_allow_unencrypt:[],should_quit:0,should_use_implicit_proof:5,show:7,shown:0,side:8,sideband:1,sight:4,sign:[5,6],signatur:[5,6,8],significantli:[],similar:[1,3,4,7,8],simpl:[0,6,7,8],simpler:3,simplest:[3,6],simpli:[0,1,3,4,6,7],simplic:6,sinc:[0,1,3,4,5,6],singl:[0,3,5,6,8],singular:6,sit:[],site:[2,3],situat:[3,4,6],size:[0,1,5,6],size_str:0,sleep:[0,7],slice:0,slightli:1,slottim:[3,7],slow:[0,3,6],small:[0,3,4,6,8],snr:0,so:[0,1,3,4,5,6,7,8],softwar:[1,3,6,8],some:[0,1,3,4,6,7],someon:3,someth:6,somethign:0,soon:5,sort:[3,6],soundmodem:3,sourc:[0,1,4,6,8],space:[0,1,4,8],span:6,special:[6,7],specif:[0,2,3,5,8],specifi:[0,1,3,4,5,7],spectrum:[3,6],speed:[3,6,7],split:0,sponsor:8,spread:3,spreadingfactor:3,squelch:3,ssid:3,stabl:[6,8],stack:[0,1,4,6,7,8],stage:6,stai:[0,7],standard:[1,6],start:[0,2,3,5,6,7],startlimitintervalsec:[],startup:0,state:0,station:3,stationari:4,statist:0,statu:[0,1,2,3,5,6,7],stdout:0,step:1,still:[0,4,6],stock:0,stop:8,stopbit:[3,7],store:[0,6],store_tru:0,str:0,strategi:5,stream:6,strength:8,strictli:6,string:[0,5],strong:6,structur:6,subject:6,subnet:[1,4],subsequ:6,succe:1,successful:5,successfulli:0,sucessfulli:6,sudo:[1,7],suffic:6,suffici:[6,7],suffix:0,suit:[1,6],suitabl:[0,3,4,6],suppli:[4,5,6],support:[0,2,4,6,8],sure:[1,7],surviv:6,sy:0,symlink:[1,7],symmetr:[5,6],system:[0,1,2,3,5,8],systemctl:7,systemd:7,t:[0,1,3,4,6],tabl:[1,4,6],tail:3,take:[0,1,3,6,8],taken:[0,6],tangerin:0,target:[0,7],target_host:[1,3],target_port:[1,3],tcp:[1,2,4,6,8],tcpclientinterfac:[1,3],tcpinterfac:7,tcpserverinterfac:[1,3],tdata:0,teardown:[0,5],teardown_reason:0,teffect:0,tell:[0,3],temperatur:6,ten:6,term:[4,6],termin:[1,5],terminolog:[4,6],termux:1,test:[3,6],testnet:[1,7],text:[0,4,6],tfile:0,than:[0,1,4,6],thei:[0,4,5,6],them:[0,3,6],thereaft:6,therefor:[6,8],thi:[0,1,2,3,4,5,6,7],thing:1,those:4,though:6,thourough:8,thread:0,three:[4,6],throough:3,throttl:4,through:[1,3,4,5,6,8],throughout:6,throughput:[6,8],thu:[4,5,6],ti:[0,6],time:[0,1,3,4,5,6,7],timeout:[0,5],timeout_callback:[],timeoutarg:0,timestr:0,tnc:[3,5,7,8],to_fil:5,todai:6,todo:[],togeth:6,token:[5,6],too:[0,4,6],tool:8,top:[4,6],topic:6,topographi:[1,4],topolog:[3,6],total:[6,8],total_s:0,touch:8,toward:[0,6],tradit:4,traffic:[0,1,3,4,5,6],tramsit:[],transceiv:[1,3,6,8],transfer:[0,5,6,8],transfer_s:0,transmiss:[1,3,6],transmit:[0,3,6],transpar:[3,6],transpor:3,transport:[0,1,2,4,7,8],transport_en:5,transport_id:[],transport_typ:[],travers:6,treat:6,tri:0,trip:[0,5,7],trivial:8,truli:6,truncat:[5,6],truncated_hash:5,truncated_hashlength:5,trust:6,trustless:[6,8],ttime:0,ttransfer:0,ttyusb0:[3,7],ttyusb1:3,ttyusb2:3,tun0:3,tune:[],tunnel:[3,6,8],tupl:5,turnaround:3,tutori:1,two:[0,1,3,4,6],tx:[3,7],txpower:3,txtail:[3,7],type:[0,1,2,3,4,5,7],typeerror:5,ubuntu:7,udp:[2,4,6,7,8],udpinterfac:[3,7],umsgpack:0,uncencrypt:0,uncensor:1,under:7,underli:[4,8],understand:[1,2],unencrypt:[0,5,6],unequivoc:6,unforg:8,unidentifi:0,unifi:4,uninterest:0,uniqu:[6,8],unit:[0,7],unknown:[0,5,6],unless:[1,3,5,6],unlicens:6,unpack:0,unpackb:0,unplug:7,unreli:3,unsign:[1,7],unsupport:5,until:[0,5,6],unwant:6,up:[0,1,3,4,6,7,8],updat:[0,1,5],upgrad:1,upon:[0,6],upset:0,urandom:8,us:[0,2,3,4,5,6],usabl:6,usag:[6,7],usb:[4,6,7,8],useabl:6,user:[0,1,3,4,6,7],user_input:0,userland:8,usernameher:7,usr:7,utf:0,util:[0,2,3,6],utilis:[4,7,8],v:7,valid:[0,3,5,6,7],valu:[3,5,6],valueerror:[0,5],vari:7,variabl:0,varieti:[3,6,8],variou:[0,3,6],ve:1,vendor:0,verbos:7,veri:[1,4,5,6,7,8],verif:[5,6],verifi:[0,5,6],versa:[4,8],version:7,vhf:[4,6],via:[1,3,6,7],vice:[4,8],view:[1,6,7],virtual:4,visibl:0,wa:[0,3,4,5,6,8],wai:[0,1,3,4,6],wait:[0,6],want:[0,1,3,4,6,7,8],wantedbi:7,warrant:8,wast:3,wb:0,we:[0,1,3,6],websit:3,well:[3,4,5,6,8],went:0,were:4,what:[0,1,2,5,6],whatev:[5,6],wheel:1,when:[0,1,3,4,5,6,7],whenev:5,where:[2,3,4,5,6,7],whereupon:6,whether:[0,3,5,6],which:[0,1,3,4,5,6,7],who:6,wide:[3,6,8],wider:6,wifi:[1,3,4,6,7,8],wildcard:0,willing:4,window:6,wire:[3,6,8],wireless:4,wish:6,within:[0,1,3,4,5,6],without:[4,6,8],wlan0:3,won:0,work:[1,6,7,8],world:[4,6,8],worri:4,would:[1,3,4,6],write:[0,1,5],written:6,wrong:0,x25519:[5,6,8],x:6,xenon:0,y:0,ye:[1,3,6],year:6,yet:[0,3,6],yi:0,ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha:1,you:[0,1,2,3,4,5,6,7,8],your:[0,1,2,3,4,6,8],yourself:[6,8],z:0,zero:[5,8],zeromq:4,zi:0},titles:["Code Examples","Getting Started Fast","Reticulum Network Stack Manual","Supported Interfaces","Building Networks","API Reference","Understanding Reticulum","Using Reticulum on Your System","What is Reticulum?"],titleterms:{"1":[],"2":[],"25":3,"class":5,"function":6,"public":6,"try":1,The:[6,7],With:1,ad:1,android:1,announc:[0,6],api:5,arm64:1,auto:3,ax:3,base:1,basic:6,binari:6,bridg:4,broadcast:0,build:4,can:8,caveat:8,client:3,code:0,common:3,concept:4,configur:7,connect:1,converg:4,creat:1,current:8,deliveri:[],destin:[5,6],detail:6,develop:1,devic:8,doe:8,echo:0,emptor:8,establish:6,exampl:[0,4],fast:1,filetransf:0,fix:7,format:6,further:6,get:[1,6],gipsum:[],goal:6,growth:4,i2p:3,ident:[5,6],identif:0,improv:7,includ:[1,7],indic:2,instanc:1,interconnect:4,interfac:[1,3,8],internet:[1,4],introduct:6,kei:6,kiss:3,link:[0,5,6],lora:[3,4],manual:2,mechan:6,minim:0,motiv:6,name:[6,7],network:[1,2,4],node:6,offer:8,option:3,orem:[],over:[1,4],overview:4,packet:[5,6],particip:1,pathfind:[],port:7,predict:[],prioritis:6,program:[1,7],protocol:6,proven:[],radio:1,reach:6,receipt:5,refer:[5,6],request:[0,5],resourc:[5,6],respons:0,reticulum:[1,2,5,6,7,8],retiiculum:[],rnode:3,rnpath:7,rnprobe:7,rnsd:7,rnstatu:7,run:[],scenario:4,serial:[3,7],server:3,servic:7,setup:6,site:4,specif:6,stack:2,start:1,statu:8,step:[],support:3,system:[6,7],tabl:2,tcp:3,transport:[5,6],type:[6,8],udp:3,understand:6,us:[1,7,8],util:[1,7],what:8,where:8,your:7}}) \ No newline at end of file diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index 1a0bbad..6ef144e 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -5,7 +5,7 @@ - Understanding Reticulum — Reticulum Network Stack 0.3.3 beta documentation + Understanding Reticulum — Reticulum Network Stack 0.3.4 beta documentation @@ -31,7 +31,7 @@
  • previous |
  • - + @@ -334,14 +334,26 @@ hops in the network.

    networks are fundamentally incompatible with the physical link types that Reticulum was designed to handle. These routing methodologies assume trust at the physical layer, and often needs a lot more bandwidth than Reticulum can assume is available.

    -

    Since Reticulum is designed to run over open radio spectrum, no such trust exists, and bandwidth is often -very limited. Existing routing protocols like BGP or OSPF carry too much overhead to be practically +

    Since Reticulum is designed to survive running over open radio spectrum, no such trust exists, and bandwidth +is often very limited. Existing routing protocols like BGP or OSPF carry too much overhead to be practically useable over bandwidth-limited, high-latency links.

    To overcome such challenges, Reticulum’s Transport system uses public-key cryptography to -implement the concept of paths that allow discovery of how to get information to a certain +implement the concept of paths that allow discovery of how to get information closer to a certain destination. It is important to note that no single node in a Reticulum network knows the complete path to a destination. Every Transport node participating in a Reticulum network will only know what the most direct way to get a packet one hop closer to it’s destination is.

    +
    +

    Node Types

    +

    Currently, Reticulum distinguishes between two types of network nodes. All nodes on a Reticulum network +are Reticulum Instances, and some are alo Transport Nodes. If a system running Reticulum is fixed in +one place, and is intended to be kept available most of the time, it can be a Transport Node, by enabling +it in the configuration.

    +

    This distinction is made by the user configuring the node, and is used to determine what nodes on the +network will help forward traffic, and what nodes rely on other nodes for wider connectivity.

    +

    If a node is a Instance it should be given the configuration directive enable_transport = No, which +is the default setting.

    +

    If it is a Transport Node, it should be given the configuration directive enable_transport = Yes.

    +

    The Announce Mechanism in Detail

    When an announce is transmitted by a node, it will be forwarded by any node receiving it, but @@ -358,7 +370,7 @@ total it has been retransmitted to get here.

  • If the announce has been retransmitted m+1 times, it will not be forwarded. By default, m is -set to 18.
    +set to 128.
  • @@ -371,7 +383,7 @@ set to 18.
  • If at least d seconds has passed since the announce was received, and no other packets with a -priority higher than p are waiting in the queue (see Packet Prioritisation), and the channel is +priority higher than p are waiting in the queue, and the channel is not utilized by other traffic, the announce will be forwarded.
  • @@ -398,10 +410,13 @@ addressed to that destination. Any node with knowledge of the announce will be a packet towards the destination by looking up the next node with the shortest amount of hops to the destination.

    According to these rules and default constants, an announce will propagate throughout the network -in a predictable way. In an example network utilising the default constants, and with an average link -distance of Lavg = 15 kilometers, an announce will be able to propagate outwards to a radius of 180 -kilometers in 34 minutes, and a maximum announce radius of 270 kilometers in approximately 3 -days.

    +in a predictable way.

    +

    As an example, in a network based only on radio transceivers with an average link distance of 15 +kilometers, an announce will be able to propagate outwards over 12 hops, to a radius of 180 +kilometers, in approximately 20 minutes.

    +

    The design and constants of the decay and delay functionality in the announce propagation is subject +to change and optimisation as real-world usage is explored. The announce propagation speed can be +increased at the cost of increased bandwidth consumption.

    Reaching the Destination

    @@ -657,15 +672,6 @@ even if you have none of the hardware already, and need to purchase everything.<

    This chapter will detail protocol specific information that is essential to the implementation of Reticulum, but non critical in understanding how the protocol works on a general level. It should be treated more as a reference than as essential reading.

    -
    -

    Node Types

    -

    Currently Reticulum defines two node types, the Station and the Peer. A node is a station if it fixed -in one place, and if it is intended to be kept online most of the time. Otherwise the node is a peer.

    -

    This distinction is made by the user configuring the node, and is used to determine what nodes on the -network will help forward traffic, and what nodes rely on other nodes for connectivity.

    -

    If a node is a Peer it should be given the configuration directive enable_transport = No.

    -

    If it is a Station, it should be given the configuration directive enable_transport = Yes.

    -

    Packet Prioritisation

    Currently, Reticulum is completely priority-agnostic regarding general traffic. All traffic is handled @@ -798,6 +804,7 @@ proof 11

  • Reticulum Transport
  • diff --git a/docs/manual/using.html b/docs/manual/using.html index 1daaeb4..db4879d 100644 --- a/docs/manual/using.html +++ b/docs/manual/using.html @@ -5,7 +5,7 @@ - Using Reticulum on Your System — Reticulum Network Stack 0.3.3 beta documentation + Using Reticulum on Your System — Reticulum Network Stack 0.3.4 beta documentation @@ -31,7 +31,7 @@
  • previous |
  • - +
    @@ -330,7 +330,7 @@ WantedBy=multi-user.target
  • previous |
  • - + diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html index abd6367..d58b28d 100644 --- a/docs/manual/whatis.html +++ b/docs/manual/whatis.html @@ -5,7 +5,7 @@ - What is Reticulum? — Reticulum Network Stack 0.3.3 beta documentation + What is Reticulum? — Reticulum Network Stack 0.3.4 beta documentation @@ -31,7 +31,7 @@
  • previous |
  • - + @@ -184,7 +184,7 @@ network, and vice versa.

  • previous |
  • - + diff --git a/docs/source/conf.py b/docs/source/conf.py index da0ec34..575ed64 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -22,7 +22,7 @@ copyright = '2021, Mark Qvist' author = 'Mark Qvist' # The full version, including alpha/beta/rc tags -release = '0.3.3 beta' +release = '0.3.4 beta' # -- General configuration --------------------------------------------------- diff --git a/docs/source/gettingstartedfast.rst b/docs/source/gettingstartedfast.rst index 24264b9..d01e556 100644 --- a/docs/source/gettingstartedfast.rst +++ b/docs/source/gettingstartedfast.rst @@ -35,6 +35,15 @@ on your system, you might need to reboot your system for your program to become available. If you get a "command not found" error or similar when running the program, reboot your system and try again. +If you would rather use a program with a graphical user interface, you can take +a look at `Sideband `_, which is available for Android, +Linux and macOS. + +.. image:: screenshots/sideband_1.png + :width: 400px + :align: center + :target: _images/sideband_1.png + Using the Included Utilities ============================================= @@ -59,27 +68,34 @@ 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 -your existing ethernet network (if there is one), and only allows you to -communicate with other Reticulum peers within your local broadcast domain. +your existing ethernet and WiFi networks (if any), and only allows you to +communicate with other Reticulum peers within your local broadcast domains. To communicate further, you will have to add one or more interfaces. The default configuration includes a number of examples, ranging from using TCP over the internet, to LoRa and Packet Radio interfaces. +With Reticulum, you only need to configure what interfaces you want to communicate +over. There is no need to configure address spaces, subnets, routing tables, +or other things you might be used to from other network types. + +Once Reticulums knows which interfaces it should use, it will automatically +discover topography and configure transport of data to any destinations it +knows about. + Possibly, the examples in the config file are enough to get you started. If you want more information, you can read the :ref:`Building Networks` and :ref:`Interfaces` chapters of this manual. - -Bridging Over the Internet -============================================= -Reticulum currently offers two interfaces for connecting nodes over the internet: -`TCP `_ and `I2P `_. Each interface offers a different set of features, and Reticulum +Connecting Reticulum Instances Over the Internet +================================================ +Reticulum currently offers two interfaces for connecting instances over the Internet: :ref:`TCP` +and :ref:`I2P`. Each interface offers a different set of features, and Reticulum users should carefully choose the interface which best suites their needs. -The ``TCPServerInterface`` allows users to host a node accessible over TCP/IP. This +The ``TCPServerInterface`` allows users to host an instance accessible over TCP/IP. This method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``, -however it leaks considerable metadata about the server host. +however it also leaks considerable metadata about the server host. Direct TCP client connections are able to see your node's IP address and may be able to use this information to determine your location or identity. Adversaries @@ -101,16 +117,16 @@ bandwidth and compute power, but also makes timing attacks and other forms of deep-packet-inspection much more difficult. Similar to RNS, I2P uses cryptographic public keys as destination addresses, which allows users to host nodes on non-static IPs. -In general it is recommended to use an I2P node if you are hosting your node -publicly. +In general it is recommended to use an I2P node if you want to host a publically accessible +instance, while preserving anonymity. If you care more about performance, and a slightly +easier setup, use TCP. -There is a experimental public testnet you can join by adding the following +There is a experimental public testnet you can join by adding one of the following interfaces to your ``.reticulum/config`` file: .. code:: # For connecting over TCP/IP: - [[RNS Testnet Frankfurt]] type = TCPClientInterface interface_enabled = yes @@ -120,7 +136,6 @@ interfaces to your ``.reticulum/config`` file: # For connecting over I2P: - [[RNS Testnet I2P Node A]] type = I2PInterface interface_enabled = yes @@ -212,8 +227,11 @@ installing Reticulum or programs that depend on Reticulum. Reticulum on Android ============================================== Reticulum can be used on Android in different ways. The easiest way to get -started is using the `Termux app `_, at the time of writing -available on `F-droid `_. +started is using an app like `Sideband `_. + +For more control and features, you can use Reticulum and related programs via +the `Termux app `_, at the time of writing available on +`F-droid `_. Termux is a terminal emulator and Linux environment for Android based devices, which includes the ability to use many different programs and libraries, @@ -253,3 +271,18 @@ From within Termux, execute the following: It is also possible to include Reticulum in apps compiled and distributed as Android APKs. A detailed tutorial and example source code will be included here at a later point. + +Adding Radio Interfaces +============================================== +Once you have Reticulum installed and working, you can add radio interfaces with +any compatible hardware you have available. For information on how to configure +this, see the :ref:`Interfaces` section of this manual. + +A range of common LoRa development boards and transceiver modules can be used +as interfaces with Reticulum. You can refer to the following external resources +for more information: + +* `How To Make Your Own RNodes `_ +* `Installing RNode Firmware on Compatible LoRa Devices `_ +* `Private, Secure and Uncensorable Messaging Over a LoRa Mesh `_ +* `RNode Firmware `_ diff --git a/docs/source/screenshots/sideband_1.png b/docs/source/screenshots/sideband_1.png new file mode 100644 index 0000000000000000000000000000000000000000..89c0f17f3ddfa6c3c02fcc30ada5efa0e5fdec46 GIT binary patch literal 80971 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 literal 0 HcmV?d00001 diff --git a/docs/source/understanding.rst b/docs/source/understanding.rst index fe3c40b..5e267be 100644 --- a/docs/source/understanding.rst +++ b/docs/source/understanding.rst @@ -300,16 +300,36 @@ networks are fundamentally incompatible with the physical link types that Reticu These routing methodologies assume trust at the physical layer, and often needs a lot more bandwidth than Reticulum can assume is available. -Since Reticulum is designed to run over open radio spectrum, no such trust exists, and bandwidth is often -very limited. Existing routing protocols like BGP or OSPF carry too much overhead to be practically +Since Reticulum is designed to survive running over open radio spectrum, no such trust exists, and bandwidth +is often very limited. Existing routing protocols like BGP or OSPF carry too much overhead to be practically useable over bandwidth-limited, high-latency links. To overcome such challenges, Reticulum’s *Transport* system uses public-key cryptography to -implement the concept of *paths* that allow discovery of how to get information to a certain +implement the concept of *paths* that allow discovery of how to get information closer to a certain destination. It is important to note that no single node in a Reticulum network knows the complete path to a destination. Every Transport node participating in a Reticulum network will only know what the most direct way to get a packet one hop closer to it's destination is. + +.. _understanding-nodetypes: + +Node Types +---------- + +Currently, Reticulum distinguishes between two types of network nodes. All nodes on a Reticulum network +are *Reticulum Instances*, and some are alo *Transport Nodes*. If a system running Reticulum is fixed in +one place, and is intended to be kept available most of the time, it can be a *Transport Node*, by enabling +it in the configuration. + +This distinction is made by the user configuring the node, and is used to determine what nodes on the +network will help forward traffic, and what nodes rely on other nodes for wider connectivity. + +If a node is a *Instance* it should be given the configuration directive ``enable_transport = No``, which +is the default setting. + +If it is a *Transport Node*, it should be given the configuration directive ``enable_transport = Yes``. + + .. _understanding-announce: The Announce Mechanism in Detail @@ -325,14 +345,14 @@ according to some specific rules: total it has been retransmitted to get here. * | If the announce has been retransmitted *m+1* times, it will not be forwarded. By default, *m* is - set to 18. + set to 128. * | The announce will be assigned a delay *d* = c\ :sup:`h` seconds, where *c* is a decay constant, and *h* is the amount of times this packet has already been forwarded. * | The packet will be given a priority *p = 1/d*. * | If at least *d* seconds has passed since the announce was received, and no other packets with a - priority higher than *p* are waiting in the queue (see Packet Prioritisation), and the channel is + priority higher than *p* are waiting in the queue, and the channel is not utilized by other traffic, the announce will be forwarded. * | If no other nodes are heard retransmitting the announce with a greater hop count than when @@ -354,10 +374,15 @@ packet towards the destination by looking up the next node with the shortest amo destination. According to these rules and default constants, an announce will propagate throughout the network -in a predictable way. In an example network utilising the default constants, and with an average link -distance of *Lavg =* 15 kilometers, an announce will be able to propagate outwards to a radius of 180 -kilometers in 34 minutes, and a *maximum announce radius* of 270 kilometers in approximately 3 -days. +in a predictable way. + +As an example, in a network based only on radio transceivers with an average link distance of 15 +kilometers, an announce will be able to propagate outwards over 12 hops, to a radius of 180 +kilometers, in approximately 20 minutes. + +The design and constants of the decay and delay functionality in the announce propagation is subject +to change and optimisation as real-world usage is explored. The announce propagation speed can be +increased at the cost of increased bandwidth consumption. .. _understanding-paths: @@ -579,20 +604,6 @@ Reticulum, but non critical in understanding how the protocol works on a general treated more as a reference than as essential reading. -Node Types ----------- - -Currently Reticulum defines two node types, the *Station* and the *Peer*. A node is a *station* if it fixed -in one place, and if it is intended to be kept online most of the time. Otherwise the node is a *peer*. - -This distinction is made by the user configuring the node, and is used to determine what nodes on the -network will help forward traffic, and what nodes rely on other nodes for connectivity. - -If a node is a *Peer* it should be given the configuration directive ``enable_transport = No``. - -If it is a *Station*, it should be given the configuration directive ``enable_transport = Yes``. - - Packet Prioritisation ---------------------
  • previous |