diff --git a/docs/manual/_sources/gettingstartedfast.rst.txt b/docs/manual/_sources/gettingstartedfast.rst.txt index d01e556..2d70d8a 100644 --- a/docs/manual/_sources/gettingstartedfast.rst.txt +++ b/docs/manual/_sources/gettingstartedfast.rst.txt @@ -97,32 +97,36 @@ The ``TCPServerInterface`` allows users to host an instance accessible over TCP/ method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``, 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 +Direct TCP client connections are able to see the IP address of your instance 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 -like time of transmission and packet size. By default TCP does not encrypt traffic, -so an adversary may be able to use packet inspection to learn that a system is running -Reticulum, and what other IP adresses connect to it. Hosting a node via TCP server also -requires a public IP address. +inspecting your packets may be able to record packet metadata like time of transmission and packet size. +Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use +packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it. +Hosting a publicly reachable instance over TCP also requires a publicly reachable IP address, +which most Internet connections don't offer anymore. The ``I2PInterface`` routes messages through the `Invisible Internet Protocol (I2P) `_. To properly use this interface, users must also run an I2P daemon in -parallel to ``rnsd``. For always-on nodes it is recommended to use `i2pd `_ because it +parallel to ``rnsd``. For always-on I2P nodes it is recommended to use `i2pd `_ because it generally runs more efficiently. -By default, I2P will fully encrypt all traffic sent over the network, and -obfuscate both the sender's and receiver's IP addresses. Running an I2P node +By default, I2P will encrypt all traffic sent over the Internet, and +hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node 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. +deep-packet-inspection much more difficult. + +I2P also allows users to host globally available Reticulum instances from non-public IPs and behind firewalls. 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: +Connect to the Public Testnet +=========================================== + +An experimental public testnet has been made accessible over both I2P and TCP. You can join it +by adding one of the following interfaces to your ``.reticulum/config`` file: .. code:: @@ -141,6 +145,10 @@ interfaces to your ``.reticulum/config`` file: interface_enabled = yes peers = ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha.b32.i2p +Many other Reticulum instances are connecting to this testnet, and you can also join it +via other entry points if you know them. There is absolutely no control over the network +topography, usage or what types of instances connect. It will also occasionally be used +to test various failure scenarios, and there are no availability or service guarantees. Develop a Program with Reticulum =========================================== diff --git a/docs/manual/_sources/understanding.rst.txt b/docs/manual/_sources/understanding.rst.txt index 5e267be..465a0ad 100644 --- a/docs/manual/_sources/understanding.rst.txt +++ b/docs/manual/_sources/understanding.rst.txt @@ -44,8 +44,7 @@ be a microwave network using off-the-shelf radios. At the time of release of thi recommended setup for development and testing is using LoRa radio modules with an open source firmware (see the section :ref:`Reference System Setup`), connected to a small computer like a Raspberry Pi. As an example, the default reference setup provides a channel capacity -of 5.4 Kbps, and a usable direct node-to-node range of around 15 kilometers (indefinitely extendable -by using multiple hops). +of 5.4 Kbps, and a usable direct node-to-node range of around 15 kilometers (extendable by using multiple hops). .. _understanding-goals: @@ -543,57 +542,62 @@ or stream data directly from files. .. _understanding-referencesystem: -Reference System Setup +Reference Setup ====================== -This section will detail the recommended *Reference System Setup* for Reticulum. It is important to -note that Reticulum is designed to be usable over more or less any medium that allows you to send -and receive data in a digital form, and satisfies some very low minimum requirements. The -communication channel must support at least half-duplex operation, and provide an average -throughput of around 1000 bits per second, and supports a physical layer MTU of 500 bytes. The -Reticulum software should be able to run on more or less any hardware that can provide a Python 3.x +This section will detail a recommended *Reference Setup* for Reticulum. It is important to +note that Reticulum is designed to be usable on more or less any computing device, and over more +or less any medium that allows you to send and receive data, which satisfies some very low +minimum requirements. + +The communication channel must support at least half-duplex operation, and provide an average +throughput of around 500 bits per second, and supports a physical layer MTU of 500 bytes. The +Reticulum stack should be able to run on more or less any hardware that can provide a Python 3.x runtime environment. -That being said, the reference setup has been outlined to provide a common platform for anyone +That being said, this reference setup has been outlined to provide a common platform for anyone who wants to help in the development of Reticulum, and for everyone who wants to know a -recommended setup to get started. A reference system consists of three parts: +recommended setup to get started experimenting. A reference system consists of three parts: -* **A channel access device** - Or *CAD* , in short, provides access to the physical medium whereupon the communication +* **An Interface Device** + Which provides access to the physical medium whereupon the communication takes place, for example a radio with an integrated modem. A setup with a separate modem - connected to a radio would also be termed a “channel access device”. -* **A host device** - Some sort of computing device that can run the necessary software, communicates with the - channel access device, and provides user interaction. -* **A software stack** + connected to a radio would also be an interface device. +* **A Host Device** + Some sort of computing device that can run the necessary software, communicate with the + interface device, and provide user interaction. +* **A Software Stack** The software implementing the Reticulum protocol and applications using it. The reference setup can be considered a relatively stable platform to develop on, and also to start -building networks on. While details of the implementation might change at the current stage of +building networks or applications on. While details of the implementation might change at the current stage of development, it is the goal to maintain hardware compatibility for as long as entirely possible, and the current reference setup has been determined to provide a functional platform for many years into the future. The current Reference System Setup is as follows: -* **Channel Access Device** +* **Interface Device** A data radio consisting of a LoRa radio module, and a microcontroller with open source firmware, that can connect to host devices via USB. It operates in either the 430, 868 or 900 MHz frequency bands. More details can be found on the `RNode Page `_. -* **Host device** +* **Host Device** Any computer device running Linux and Python. A Raspberry Pi with a Debian based OS is recommended. -* **Software stack** - The current Reference Implementation Release of Reticulum, running on a Debian based +* **Software Stack** + The most recently released Python Implementation of Reticulum, running on a Debian based operating system. -It is very important to note, that the reference channel access device **does not** use the LoRaWAN -standard, but uses a custom MAC layer on top of the plain LoRa modulation! As such, you will -need a plain LoRa radio module connected to an MCU with the correct firmware. Full details on how to +To avoid confusion, it is very important to note, that the reference interface device **does not** +use the LoRaWAN standard, but uses a custom MAC layer on top of the plain LoRa modulation! As such, you will +need a plain LoRa radio module connected to an controller with the correct firmware. Full details on how to get or make such a device is available on the `RNode Page `_. With the current reference setup, it should be possible to get on a Reticulum network for around 100$ even if you have none of the hardware already, and need to purchase everything. +This reference setup is of course just a recommendation for getting started easily, and you should +tailor it to your own specific needs, or whatever hardware you have available. + .. _understanding-protocolspecifics: Protocol Specifics @@ -675,7 +679,7 @@ Binary Packet Format +- Packet Example -+ - HEADER FIELD ADDRESSES FIELD CONTEXT FIELD DATA FIELD + HEADER FIELD DESTINATION FIELDS CONTEXT FIELD DATA FIELD _______|_______ ________________|________________ ________|______ __|_ | | | | | | | | 01010000 00000100 [ADDR1, 10 bytes] [ADDR2, 10 bytes] [CONTEXT, 1 byte] [DATA] @@ -689,7 +693,7 @@ Binary Packet Format +- Packet Example -+ - HEADER FIELD ADDRESSES FIELD CONTEXT FIELD DATA FIELD + HEADER FIELD DESTINATION FIELD CONTEXT FIELD DATA FIELD _______|_______ _______|_______ ________|______ __|_ | | | | | | | | 00000000 00000111 [ADDR1, 10 bytes] [CONTEXT, 1 byte] [DATA] diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html index 85196d9..da69f14 100644 --- a/docs/manual/gettingstartedfast.html +++ b/docs/manual/gettingstartedfast.html @@ -114,28 +114,31 @@ users should carefully choose the interface which best suites their needs.

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 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 +

Direct TCP client connections are able to see the IP address of your instance 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 -like time of transmission and packet size. By default TCP does not encrypt traffic, -so an adversary may be able to use packet inspection to learn that a system is running -Reticulum, and what other IP adresses connect to it. Hosting a node via TCP server also -requires a public IP address.

+inspecting your packets may be able to record packet metadata like time of transmission and packet size. +Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use +packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it. +Hosting a publicly reachable instance over TCP also requires a publicly reachable IP address, +which most Internet connections don’t offer anymore.

The I2PInterface routes messages through the Invisible Internet Protocol (I2P). To properly use this interface, users must also run an I2P daemon in -parallel to rnsd. For always-on nodes it is recommended to use i2pd because it +parallel to rnsd. For always-on I2P nodes it is recommended to use i2pd because it generally runs more efficiently.

-

By default, I2P will fully encrypt all traffic sent over the network, and -obfuscate both the sender’s and receiver’s IP addresses. Running an I2P node +

By default, I2P will encrypt all traffic sent over the Internet, and +hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node 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.

+deep-packet-inspection much more difficult.

+

I2P also allows users to host globally available Reticulum instances from non-public IPs and behind firewalls.

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:

+ +
+

Connect to the Public Testnet

+

An experimental public testnet has been made accessible over both I2P and TCP. You can join it +by adding one of the following interfaces to your .reticulum/config file:

# For connecting over TCP/IP:
 [[RNS Testnet Frankfurt]]
   type = TCPClientInterface
@@ -152,6 +155,10 @@ interfaces to your 
   peers = ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha.b32.i2p
 
+

Many other Reticulum instances are connecting to this testnet, and you can also join it +via other entry points if you know them. There is absolutely no control over the network +topography, usage or what types of instances connect. It will also occasionally be used +to test various failure scenarios, and there are no availability or service guarantees.

Develop a Program with Reticulum

@@ -296,6 +303,7 @@ for more information:

  • Using the Included Utilities
  • Creating a Network With Reticulum
  • Connecting Reticulum Instances Over the Internet
  • +
  • Connect to the Public Testnet
  • Develop a Program with Reticulum
  • Participate in Reticulum Development
  • Reticulum on ARM64
  • diff --git a/docs/manual/index.html b/docs/manual/index.html index b58cd87..ab3941b 100644 --- a/docs/manual/index.html +++ b/docs/manual/index.html @@ -57,6 +57,7 @@ to participate in the development of Reticulum itself.

  • Using the Included Utilities
  • Creating a Network With Reticulum
  • Connecting Reticulum Instances Over the Internet
  • +
  • Connect to the Public Testnet
  • Develop a Program with Reticulum
  • Participate in Reticulum Development
  • Reticulum on ARM64
  • @@ -119,7 +120,7 @@ to participate in the development of Reticulum itself.

  • Resources
  • -
  • Reference System Setup
  • +
  • Reference Setup
  • Protocol Specifics
    • Packet Prioritisation
    • Binary Packet Format
    • diff --git a/docs/manual/objects.inv b/docs/manual/objects.inv index 971f264..3a09ca7 100644 Binary files a/docs/manual/objects.inv and b/docs/manual/objects.inv differ diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 78fc7ff..cf2b96e 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,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 +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,"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,2,3,5],"return":[0,5],"short":[6,7],"static":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,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:1,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],anymor:1,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,1,3,4,5,6,8],befor:[0,1,5,6,7],begin:[0,5],begun:5,behaviour:3,behind:[1,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:[],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],confus:6,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,6],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:[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,1,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:[1,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],failur:1,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:[1,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:[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,1,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:[1,6],guid:[1,5,6],h:[1,6,7],ha:[0,1,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],hide:1,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:[],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,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:[1,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:[],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],morej:[],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:[],object:5,obtain:6,occasion:1,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: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:[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,1,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],recent:6,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,6,8],systemctl:7,systemd:7,t:[0,1,3,4,6],tabl:[1,4,6],tail:3,tailor:6,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:[1,3,6],testnet:[2,7],text:[0,4,6],tfile:0,than:[0,1,4,6],thei:[0,4,5,6],them:[0,1,3,6],thereaft:6,therefor:[6,8],thi:[0,1,2,3,4,5,6,7],thing:1,those:4,though:[1,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:[1,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,1,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":[1,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:7,tabl:2,tcp:3,testnet:1,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 6ef144e..8846ac1 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -75,8 +75,7 @@ be a microwave network using off-the-shelf radios. At the time of release of thi recommended setup for development and testing is using LoRa radio modules with an open source firmware (see the section Reference System Setup), connected to a small computer like a Raspberry Pi. As an example, the default reference setup provides a channel capacity -of 5.4 Kbps, and a usable direct node-to-node range of around 15 kilometers (indefinitely extendable -by using multiple hops).

      +of 5.4 Kbps, and a usable direct node-to-node range of around 15 kilometers (extendable by using multiple hops).

  • Goals

    @@ -602,70 +601,73 @@ of codes to reliably transfer any amount of data. They can be used to transfer d or stream data directly from files.

    -
    -

    Reference System Setup

    -

    This section will detail the recommended Reference System Setup for Reticulum. It is important to -note that Reticulum is designed to be usable over more or less any medium that allows you to send -and receive data in a digital form, and satisfies some very low minimum requirements. The -communication channel must support at least half-duplex operation, and provide an average -throughput of around 1000 bits per second, and supports a physical layer MTU of 500 bytes. The -Reticulum software should be able to run on more or less any hardware that can provide a Python 3.x +

    +

    Reference Setup

    +

    This section will detail a recommended Reference Setup for Reticulum. It is important to +note that Reticulum is designed to be usable on more or less any computing device, and over more +or less any medium that allows you to send and receive data, which satisfies some very low +minimum requirements.

    +

    The communication channel must support at least half-duplex operation, and provide an average +throughput of around 500 bits per second, and supports a physical layer MTU of 500 bytes. The +Reticulum stack should be able to run on more or less any hardware that can provide a Python 3.x runtime environment.

    -

    That being said, the reference setup has been outlined to provide a common platform for anyone +

    That being said, this reference setup has been outlined to provide a common platform for anyone who wants to help in the development of Reticulum, and for everyone who wants to know a -recommended setup to get started. A reference system consists of three parts:

    +recommended setup to get started experimenting. A reference system consists of three parts:

    • -
      A channel access device

      Or CAD , in short, provides access to the physical medium whereupon the communication +

      An Interface Device

      Which provides access to the physical medium whereupon the communication takes place, for example a radio with an integrated modem. A setup with a separate modem -connected to a radio would also be termed a “channel access device”.

      +connected to a radio would also be an interface device.

    • -
      A host device

      Some sort of computing device that can run the necessary software, communicates with the -channel access device, and provides user interaction.

      +
      A Host Device

      Some sort of computing device that can run the necessary software, communicate with the +interface device, and provide user interaction.

    • -
      A software stack

      The software implementing the Reticulum protocol and applications using it.

      +
      A Software Stack

      The software implementing the Reticulum protocol and applications using it.

    The reference setup can be considered a relatively stable platform to develop on, and also to start -building networks on. While details of the implementation might change at the current stage of +building networks or applications on. While details of the implementation might change at the current stage of development, it is the goal to maintain hardware compatibility for as long as entirely possible, and the current reference setup has been determined to provide a functional platform for many years into the future. The current Reference System Setup is as follows:

    • -
      Channel Access Device

      A data radio consisting of a LoRa radio module, and a microcontroller with open source +

      Interface Device

      A data radio consisting of a LoRa radio module, and a microcontroller with open source firmware, that can connect to host devices via USB. It operates in either the 430, 868 or 900 MHz frequency bands. More details can be found on the RNode Page.

    • -
      Host device

      Any computer device running Linux and Python. A Raspberry Pi with a Debian based OS is +

      Host Device

      Any computer device running Linux and Python. A Raspberry Pi with a Debian based OS is recommended.

    • -
      Software stack

      The current Reference Implementation Release of Reticulum, running on a Debian based +

      Software Stack

      The most recently released Python Implementation of Reticulum, running on a Debian based operating system.

    -

    It is very important to note, that the reference channel access device does not use the LoRaWAN -standard, but uses a custom MAC layer on top of the plain LoRa modulation! As such, you will -need a plain LoRa radio module connected to an MCU with the correct firmware. Full details on how to +

    To avoid confusion, it is very important to note, that the reference interface device does not +use the LoRaWAN standard, but uses a custom MAC layer on top of the plain LoRa modulation! As such, you will +need a plain LoRa radio module connected to an controller with the correct firmware. Full details on how to get or make such a device is available on the RNode Page.

    With the current reference setup, it should be possible to get on a Reticulum network for around 100$ even if you have none of the hardware already, and need to purchase everything.

    +

    This reference setup is of course just a recommendation for getting started easily, and you should +tailor it to your own specific needs, or whatever hardware you have available.

    Protocol Specifics

    @@ -736,7 +738,7 @@ proof 11 +- Packet Example -+ - HEADER FIELD ADDRESSES FIELD CONTEXT FIELD DATA FIELD + HEADER FIELD DESTINATION FIELDS CONTEXT FIELD DATA FIELD _______|_______ ________________|________________ ________|______ __|_ | | | | | | | | 01010000 00000100 [ADDR1, 10 bytes] [ADDR2, 10 bytes] [CONTEXT, 1 byte] [DATA] @@ -750,7 +752,7 @@ proof 11 +- Packet Example -+ - HEADER FIELD ADDRESSES FIELD CONTEXT FIELD DATA FIELD + HEADER FIELD DESTINATION FIELD CONTEXT FIELD DATA FIELD _______|_______ _______|_______ ________|______ __|_ | | | | | | | | 00000000 00000111 [ADDR1, 10 bytes] [CONTEXT, 1 byte] [DATA] @@ -813,7 +815,7 @@ proof 11
  • Resources
  • -
  • Reference System Setup
  • +
  • Reference Setup
  • Protocol Specifics
    • Packet Prioritisation
    • Binary Packet Format
    • diff --git a/docs/source/gettingstartedfast.rst b/docs/source/gettingstartedfast.rst index d01e556..2d70d8a 100644 --- a/docs/source/gettingstartedfast.rst +++ b/docs/source/gettingstartedfast.rst @@ -97,32 +97,36 @@ The ``TCPServerInterface`` allows users to host an instance accessible over TCP/ method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``, 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 +Direct TCP client connections are able to see the IP address of your instance 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 -like time of transmission and packet size. By default TCP does not encrypt traffic, -so an adversary may be able to use packet inspection to learn that a system is running -Reticulum, and what other IP adresses connect to it. Hosting a node via TCP server also -requires a public IP address. +inspecting your packets may be able to record packet metadata like time of transmission and packet size. +Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use +packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it. +Hosting a publicly reachable instance over TCP also requires a publicly reachable IP address, +which most Internet connections don't offer anymore. The ``I2PInterface`` routes messages through the `Invisible Internet Protocol (I2P) `_. To properly use this interface, users must also run an I2P daemon in -parallel to ``rnsd``. For always-on nodes it is recommended to use `i2pd `_ because it +parallel to ``rnsd``. For always-on I2P nodes it is recommended to use `i2pd `_ because it generally runs more efficiently. -By default, I2P will fully encrypt all traffic sent over the network, and -obfuscate both the sender's and receiver's IP addresses. Running an I2P node +By default, I2P will encrypt all traffic sent over the Internet, and +hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node 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. +deep-packet-inspection much more difficult. + +I2P also allows users to host globally available Reticulum instances from non-public IPs and behind firewalls. 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: +Connect to the Public Testnet +=========================================== + +An experimental public testnet has been made accessible over both I2P and TCP. You can join it +by adding one of the following interfaces to your ``.reticulum/config`` file: .. code:: @@ -141,6 +145,10 @@ interfaces to your ``.reticulum/config`` file: interface_enabled = yes peers = ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha.b32.i2p +Many other Reticulum instances are connecting to this testnet, and you can also join it +via other entry points if you know them. There is absolutely no control over the network +topography, usage or what types of instances connect. It will also occasionally be used +to test various failure scenarios, and there are no availability or service guarantees. Develop a Program with Reticulum =========================================== diff --git a/docs/source/understanding.rst b/docs/source/understanding.rst index 5e267be..465a0ad 100644 --- a/docs/source/understanding.rst +++ b/docs/source/understanding.rst @@ -44,8 +44,7 @@ be a microwave network using off-the-shelf radios. At the time of release of thi recommended setup for development and testing is using LoRa radio modules with an open source firmware (see the section :ref:`Reference System Setup`), connected to a small computer like a Raspberry Pi. As an example, the default reference setup provides a channel capacity -of 5.4 Kbps, and a usable direct node-to-node range of around 15 kilometers (indefinitely extendable -by using multiple hops). +of 5.4 Kbps, and a usable direct node-to-node range of around 15 kilometers (extendable by using multiple hops). .. _understanding-goals: @@ -543,57 +542,62 @@ or stream data directly from files. .. _understanding-referencesystem: -Reference System Setup +Reference Setup ====================== -This section will detail the recommended *Reference System Setup* for Reticulum. It is important to -note that Reticulum is designed to be usable over more or less any medium that allows you to send -and receive data in a digital form, and satisfies some very low minimum requirements. The -communication channel must support at least half-duplex operation, and provide an average -throughput of around 1000 bits per second, and supports a physical layer MTU of 500 bytes. The -Reticulum software should be able to run on more or less any hardware that can provide a Python 3.x +This section will detail a recommended *Reference Setup* for Reticulum. It is important to +note that Reticulum is designed to be usable on more or less any computing device, and over more +or less any medium that allows you to send and receive data, which satisfies some very low +minimum requirements. + +The communication channel must support at least half-duplex operation, and provide an average +throughput of around 500 bits per second, and supports a physical layer MTU of 500 bytes. The +Reticulum stack should be able to run on more or less any hardware that can provide a Python 3.x runtime environment. -That being said, the reference setup has been outlined to provide a common platform for anyone +That being said, this reference setup has been outlined to provide a common platform for anyone who wants to help in the development of Reticulum, and for everyone who wants to know a -recommended setup to get started. A reference system consists of three parts: +recommended setup to get started experimenting. A reference system consists of three parts: -* **A channel access device** - Or *CAD* , in short, provides access to the physical medium whereupon the communication +* **An Interface Device** + Which provides access to the physical medium whereupon the communication takes place, for example a radio with an integrated modem. A setup with a separate modem - connected to a radio would also be termed a “channel access device”. -* **A host device** - Some sort of computing device that can run the necessary software, communicates with the - channel access device, and provides user interaction. -* **A software stack** + connected to a radio would also be an interface device. +* **A Host Device** + Some sort of computing device that can run the necessary software, communicate with the + interface device, and provide user interaction. +* **A Software Stack** The software implementing the Reticulum protocol and applications using it. The reference setup can be considered a relatively stable platform to develop on, and also to start -building networks on. While details of the implementation might change at the current stage of +building networks or applications on. While details of the implementation might change at the current stage of development, it is the goal to maintain hardware compatibility for as long as entirely possible, and the current reference setup has been determined to provide a functional platform for many years into the future. The current Reference System Setup is as follows: -* **Channel Access Device** +* **Interface Device** A data radio consisting of a LoRa radio module, and a microcontroller with open source firmware, that can connect to host devices via USB. It operates in either the 430, 868 or 900 MHz frequency bands. More details can be found on the `RNode Page `_. -* **Host device** +* **Host Device** Any computer device running Linux and Python. A Raspberry Pi with a Debian based OS is recommended. -* **Software stack** - The current Reference Implementation Release of Reticulum, running on a Debian based +* **Software Stack** + The most recently released Python Implementation of Reticulum, running on a Debian based operating system. -It is very important to note, that the reference channel access device **does not** use the LoRaWAN -standard, but uses a custom MAC layer on top of the plain LoRa modulation! As such, you will -need a plain LoRa radio module connected to an MCU with the correct firmware. Full details on how to +To avoid confusion, it is very important to note, that the reference interface device **does not** +use the LoRaWAN standard, but uses a custom MAC layer on top of the plain LoRa modulation! As such, you will +need a plain LoRa radio module connected to an controller with the correct firmware. Full details on how to get or make such a device is available on the `RNode Page `_. With the current reference setup, it should be possible to get on a Reticulum network for around 100$ even if you have none of the hardware already, and need to purchase everything. +This reference setup is of course just a recommendation for getting started easily, and you should +tailor it to your own specific needs, or whatever hardware you have available. + .. _understanding-protocolspecifics: Protocol Specifics @@ -675,7 +679,7 @@ Binary Packet Format +- Packet Example -+ - HEADER FIELD ADDRESSES FIELD CONTEXT FIELD DATA FIELD + HEADER FIELD DESTINATION FIELDS CONTEXT FIELD DATA FIELD _______|_______ ________________|________________ ________|______ __|_ | | | | | | | | 01010000 00000100 [ADDR1, 10 bytes] [ADDR2, 10 bytes] [CONTEXT, 1 byte] [DATA] @@ -689,7 +693,7 @@ Binary Packet Format +- Packet Example -+ - HEADER FIELD ADDRESSES FIELD CONTEXT FIELD DATA FIELD + HEADER FIELD DESTINATION FIELD CONTEXT FIELD DATA FIELD _______|_______ _______|_______ ________|______ __|_ | | | | | | | | 00000000 00000111 [ADDR1, 10 bytes] [CONTEXT, 1 byte] [DATA]