/ docs / manual / using.html
using.html
   1  <!doctype html>
   2  <html class="no-js" lang="en">
   3    <head><meta charset="utf-8"/>
   4      <meta name="viewport" content="width=device-width,initial-scale=1"/>
   5      <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
   6  <link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Understanding Reticulum" href="understanding.html" /><link rel="prev" title="Getting Started Fast" href="gettingstartedfast.html" />
   7  
   8      <meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/>
   9          <title>Using Reticulum on Your System - Reticulum Network Stack 1.0.0 documentation</title>
  10        <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
  11      <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" />
  12      <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
  13      <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
  14      <link rel="stylesheet" type="text/css" href="_static/custom.css" />
  15      
  16      
  17  
  18  
  19  <style>
  20    body {
  21      --color-code-background: #f8f8f8;
  22    --color-code-foreground: black;
  23    
  24    }
  25    @media not print {
  26      body[data-theme="dark"] {
  27        --color-code-background: #202020;
  28    --color-code-foreground: #d0d0d0;
  29    --color-background-primary: #202b38;
  30    --color-background-secondary: #161f27;
  31    --color-foreground-primary: #dbdbdb;
  32    --color-foreground-secondary: #a9b1ba;
  33    --color-brand-primary: #41adff;
  34    --color-background-hover: #161f27;
  35    --color-api-name: #ffbe85;
  36    --color-api-pre-name: #efae75;
  37    
  38      }
  39      @media (prefers-color-scheme: dark) {
  40        body:not([data-theme="light"]) {
  41          --color-code-background: #202020;
  42    --color-code-foreground: #d0d0d0;
  43    --color-background-primary: #202b38;
  44    --color-background-secondary: #161f27;
  45    --color-foreground-primary: #dbdbdb;
  46    --color-foreground-secondary: #a9b1ba;
  47    --color-brand-primary: #41adff;
  48    --color-background-hover: #161f27;
  49    --color-api-name: #ffbe85;
  50    --color-api-pre-name: #efae75;
  51    
  52        }
  53      }
  54    }
  55  </style></head>
  56    <body>
  57      
  58      <script>
  59        document.body.dataset.theme = localStorage.getItem("theme") || "auto";
  60      </script>
  61      
  62  
  63  <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
  64    <symbol id="svg-toc" viewBox="0 0 24 24">
  65      <title>Contents</title>
  66      <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
  67        <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
  68      </svg>
  69    </symbol>
  70    <symbol id="svg-menu" viewBox="0 0 24 24">
  71      <title>Menu</title>
  72      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
  73        stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
  74        <line x1="3" y1="12" x2="21" y2="12"></line>
  75        <line x1="3" y1="6" x2="21" y2="6"></line>
  76        <line x1="3" y1="18" x2="21" y2="18"></line>
  77      </svg>
  78    </symbol>
  79    <symbol id="svg-arrow-right" viewBox="0 0 24 24">
  80      <title>Expand</title>
  81      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
  82        stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
  83        <polyline points="9 18 15 12 9 6"></polyline>
  84      </svg>
  85    </symbol>
  86    <symbol id="svg-sun" viewBox="0 0 24 24">
  87      <title>Light mode</title>
  88      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
  89        stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
  90        <circle cx="12" cy="12" r="5"></circle>
  91        <line x1="12" y1="1" x2="12" y2="3"></line>
  92        <line x1="12" y1="21" x2="12" y2="23"></line>
  93        <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
  94        <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
  95        <line x1="1" y1="12" x2="3" y2="12"></line>
  96        <line x1="21" y1="12" x2="23" y2="12"></line>
  97        <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
  98        <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
  99      </svg>
 100    </symbol>
 101    <symbol id="svg-moon" viewBox="0 0 24 24">
 102      <title>Dark mode</title>
 103      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
 104        stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
 105        <path stroke="none" d="M0 0h24v24H0z" fill="none" />
 106        <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
 107      </svg>
 108    </symbol>
 109    <symbol id="svg-sun-half" viewBox="0 0 24 24">
 110      <title>Auto light/dark mode</title>
 111      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
 112        stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
 113        <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
 114        <circle cx="12" cy="12" r="9" />
 115        <path d="M13 12h5" />
 116        <path d="M13 15h4" />
 117        <path d="M13 18h1" />
 118        <path d="M13 9h4" />
 119        <path d="M13 6h1" />
 120      </svg>
 121    </symbol>
 122  </svg>
 123  
 124  <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
 125  <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
 126  <label class="overlay sidebar-overlay" for="__navigation">
 127    <div class="visually-hidden">Hide navigation sidebar</div>
 128  </label>
 129  <label class="overlay toc-overlay" for="__toc">
 130    <div class="visually-hidden">Hide table of contents sidebar</div>
 131  </label>
 132  
 133  
 134  
 135  <div class="page">
 136    <header class="mobile-header">
 137      <div class="header-left">
 138        <label class="nav-overlay-icon" for="__navigation">
 139          <div class="visually-hidden">Toggle site navigation sidebar</div>
 140          <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
 141        </label>
 142      </div>
 143      <div class="header-center">
 144        <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a>
 145      </div>
 146      <div class="header-right">
 147        <div class="theme-toggle-container theme-toggle-header">
 148          <button class="theme-toggle">
 149            <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
 150            <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
 151            <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
 152            <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
 153          </button>
 154        </div>
 155        <label class="toc-overlay-icon toc-header-icon" for="__toc">
 156          <div class="visually-hidden">Toggle table of contents sidebar</div>
 157          <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
 158        </label>
 159      </div>
 160    </header>
 161    <aside class="sidebar-drawer">
 162      <div class="sidebar-container">
 163        
 164        <div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
 165    
 166    <div class="sidebar-logo-container">
 167      <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
 168    </div>
 169    
 170    <span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span>
 171    
 172  </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
 173    <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
 174    <input type="hidden" name="check_keywords" value="yes">
 175    <input type="hidden" name="area" value="default">
 176  </form>
 177  <div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
 178    <ul class="current">
 179  <li class="toctree-l1"><a class="reference internal" href="whatis.html">What is Reticulum?</a></li>
 180  <li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a></li>
 181  <li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Using Reticulum on Your System</a></li>
 182  <li class="toctree-l1"><a class="reference internal" href="understanding.html">Understanding Reticulum</a></li>
 183  <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
 184  <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
 185  <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
 186  <li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
 187  <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
 188  </ul>
 189  <ul>
 190  <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
 191  </ul>
 192  
 193  </div>
 194  </div>
 195  
 196        </div>
 197        
 198      </div>
 199    </aside>
 200    <div class="main">
 201      <div class="content">
 202        <div class="article-container">
 203          <a href="#" class="back-to-top muted-link">
 204            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
 205              <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
 206            </svg>
 207            <span>Back to top</span>
 208          </a>
 209          <div class="content-icon-container">
 210            <div class="theme-toggle-container theme-toggle-content">
 211              <button class="theme-toggle">
 212                <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
 213                <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
 214                <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
 215                <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
 216              </button>
 217            </div>
 218            <label class="toc-overlay-icon toc-content-icon" for="__toc">
 219              <div class="visually-hidden">Toggle table of contents sidebar</div>
 220              <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
 221            </label>
 222          </div>
 223          <article role="main">
 224            <section id="using-reticulum-on-your-system">
 225  <span id="using-main"></span><h1>Using Reticulum on Your System<a class="headerlink" href="#using-reticulum-on-your-system" title="Permalink to this heading">#</a></h1>
 226  <p>Reticulum is not installed as a driver or kernel module, as one might expect
 227  of a networking stack. Instead, Reticulum is distributed as a Python module,
 228  containing the networking core, and a set of utility and daemon programs.</p>
 229  <p>This means that no special privileges are required to install or use it. It
 230  is also very light-weight, and easy to transfer to, and install on new systems.</p>
 231  <p>When you have Reticulum installed, any program or application that uses Reticulum
 232  will automatically load and initialise Reticulum when it starts, if it is not
 233  already running.</p>
 234  <p>In many cases, this approach is sufficient. When any program needs to use
 235  Reticulum, it is loaded, initialised, interfaces are brought up, and the
 236  program can now communicate over any Reticulum networks available. If another
 237  program starts up and also wants access to the same Reticulum network, the already
 238  running instance is simply shared. This works for any number of programs running
 239  concurrently, and is very easy to use, but depending on your use case, there
 240  are other options.</p>
 241  <section id="configuration-data">
 242  <h2>Configuration &amp; Data<a class="headerlink" href="#configuration-data" title="Permalink to this heading">#</a></h2>
 243  <p>Reticulum stores all information that it needs to function in a single file-system
 244  directory. When Reticulum is started, it will look for a valid configuration
 245  directory in the following places:</p>
 246  <ul class="simple">
 247  <li><p><code class="docutils literal notranslate"><span class="pre">/etc/reticulum</span></code></p></li>
 248  <li><p><code class="docutils literal notranslate"><span class="pre">~/.config/reticulum</span></code></p></li>
 249  <li><p><code class="docutils literal notranslate"><span class="pre">~/.reticulum</span></code></p></li>
 250  </ul>
 251  <p>If no existing configuration directory is found, the directory <code class="docutils literal notranslate"><span class="pre">~/.reticulum</span></code>
 252  is created, and the default configuration will be automatically created here.
 253  You can move it to one of the other locations if you wish.</p>
 254  <p>It is also possible to use completely arbitrary configuration directories by
 255  specifying the relevant command-line parameters when running Reticulum-based
 256  programs. You can also run multiple separate Reticulum instances on the same
 257  physical system, either in isolation from each other, or connected together.</p>
 258  <p>In most cases, a single physical system will only need to run one Reticulum
 259  instance. This can either be launched at boot, as a system service, or simply
 260  be brought up when a program needs it. In either case, any number of programs
 261  running on the same system will automatically share the same Reticulum instance,
 262  if the configuration allows for it, which it does by default.</p>
 263  <p>The entire configuration of Reticulum is found in the <code class="docutils literal notranslate"><span class="pre">~/.reticulum/config</span></code>
 264  file. When Reticulum is first started on a new system, a basic, but fully functional
 265  configuration file is created. The default configuration looks like this:</p>
 266  <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># This is the default Reticulum config file.</span>
 267  <span class="c1"># You should probably edit it to include any additional,</span>
 268  <span class="c1"># interfaces and settings you might need.</span>
 269  
 270  <span class="c1"># Only the most basic options are included in this default</span>
 271  <span class="c1"># configuration. To see a more verbose, and much longer,</span>
 272  <span class="c1"># configuration example, you can run the command:</span>
 273  <span class="c1"># rnsd --exampleconfig</span>
 274  
 275  
 276  <span class="p">[</span><span class="n">reticulum</span><span class="p">]</span>
 277  
 278  <span class="c1"># If you enable Transport, your system will route traffic</span>
 279  <span class="c1"># for other peers, pass announces and serve path requests.</span>
 280  <span class="c1"># This should be done for systems that are suited to act</span>
 281  <span class="c1"># as transport nodes, ie. if they are stationary and</span>
 282  <span class="c1"># always-on. This directive is optional and can be removed</span>
 283  <span class="c1"># for brevity.</span>
 284  
 285  <span class="n">enable_transport</span> <span class="o">=</span> <span class="n">No</span>
 286  
 287  
 288  <span class="c1"># By default, the first program to launch the Reticulum</span>
 289  <span class="c1"># Network Stack will create a shared instance, that other</span>
 290  <span class="c1"># programs can communicate with. Only the shared instance</span>
 291  <span class="c1"># opens all the configured interfaces directly, and other</span>
 292  <span class="c1"># local programs communicate with the shared instance over</span>
 293  <span class="c1"># a local socket. This is completely transparent to the</span>
 294  <span class="c1"># user, and should generally be turned on. This directive</span>
 295  <span class="c1"># is optional and can be removed for brevity.</span>
 296  
 297  <span class="n">share_instance</span> <span class="o">=</span> <span class="n">Yes</span>
 298  
 299  
 300  <span class="c1"># If you want to run multiple *different* shared instances</span>
 301  <span class="c1"># on the same system, you will need to specify different</span>
 302  <span class="c1"># instance names for each. On platforms supporting domain</span>
 303  <span class="c1"># sockets, this can be done with the instance_name option:</span>
 304  
 305  <span class="n">instance_name</span> <span class="o">=</span> <span class="n">default</span>
 306  
 307  <span class="c1"># Some platforms don&#39;t support domain sockets, and if that</span>
 308  <span class="c1"># is the case, you can isolate different instances by</span>
 309  <span class="c1"># specifying a unique set of ports for each:</span>
 310  
 311  <span class="c1"># shared_instance_port = 37428</span>
 312  <span class="c1"># instance_control_port = 37429</span>
 313  
 314  
 315  <span class="c1"># If you want to explicitly use TCP for shared instance</span>
 316  <span class="c1"># communication, instead of domain sockets, this is also</span>
 317  <span class="c1"># possible, by using the following option:</span>
 318  
 319  <span class="c1"># shared_instance_type = tcp</span>
 320  
 321  
 322  <span class="c1"># On systems where running instances may not have access</span>
 323  <span class="c1"># to the same shared Reticulum configuration directory,</span>
 324  <span class="c1"># it is still possible to allow full interactivity for</span>
 325  <span class="c1"># running instances, by manually specifying a shared RPC</span>
 326  <span class="c1"># key. In almost all cases, this option is not needed, but</span>
 327  <span class="c1"># it can be useful on operating systems such as Android.</span>
 328  <span class="c1"># The key must be specified as bytes in hexadecimal.</span>
 329  
 330  <span class="c1"># rpc_key = e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790</span>
 331  
 332  
 333  <span class="c1"># It is possible to allow remote management of Reticulum</span>
 334  <span class="c1"># systems using the various built-in utilities, such as</span>
 335  <span class="c1"># rnstatus and rnpath. You will need to specify one or</span>
 336  <span class="c1"># more Reticulum Identity hashes for authenticating the</span>
 337  <span class="c1"># queries from client programs. For this purpose, you can</span>
 338  <span class="c1"># use existing identity files, or generate new ones with</span>
 339  <span class="c1"># the rnid utility.</span>
 340  
 341  <span class="c1"># enable_remote_management = yes</span>
 342  <span class="c1"># remote_management_allowed = 9fb6d773498fb3feda407ed8ef2c3229, 2d882c5586e548d79b5af27bca1776dc</span>
 343  
 344  
 345  <span class="c1"># You can configure Reticulum to panic and forcibly close</span>
 346  <span class="c1"># if an unrecoverable interface error occurs, such as the</span>
 347  <span class="c1"># hardware device for an interface disappearing. This is</span>
 348  <span class="c1"># an optional directive, and can be left out for brevity.</span>
 349  <span class="c1"># This behaviour is disabled by default.</span>
 350  
 351  <span class="c1"># panic_on_interface_error = No</span>
 352  
 353  
 354  <span class="c1"># When Transport is enabled, it is possible to allow the</span>
 355  <span class="c1"># Transport Instance to respond to probe requests from</span>
 356  <span class="c1"># the rnprobe utility. This can be a useful tool to test</span>
 357  <span class="c1"># connectivity. When this option is enabled, the probe</span>
 358  <span class="c1"># destination will be generated from the Identity of the</span>
 359  <span class="c1"># Transport Instance, and printed to the log at startup.</span>
 360  <span class="c1"># Optional, and disabled by default.</span>
 361  
 362  <span class="c1"># respond_to_probes = No</span>
 363  
 364  
 365  <span class="p">[</span><span class="n">logging</span><span class="p">]</span>
 366  <span class="c1"># Valid log levels are 0 through 7:</span>
 367  <span class="c1">#   0: Log only critical information</span>
 368  <span class="c1">#   1: Log errors and lower log levels</span>
 369  <span class="c1">#   2: Log warnings and lower log levels</span>
 370  <span class="c1">#   3: Log notices and lower log levels</span>
 371  <span class="c1">#   4: Log info and lower (this is the default)</span>
 372  <span class="c1">#   5: Verbose logging</span>
 373  <span class="c1">#   6: Debug logging</span>
 374  <span class="c1">#   7: Extreme logging</span>
 375  
 376  <span class="n">loglevel</span> <span class="o">=</span> <span class="mi">4</span>
 377  
 378  
 379  <span class="c1"># The interfaces section defines the physical and virtual</span>
 380  <span class="c1"># interfaces Reticulum will use to communicate on. This</span>
 381  <span class="c1"># section will contain examples for a variety of interface</span>
 382  <span class="c1"># types. You can modify these or use them as a basis for</span>
 383  <span class="c1"># your own config, or simply remove the unused ones.</span>
 384  
 385  <span class="p">[</span><span class="n">interfaces</span><span class="p">]</span>
 386  
 387    <span class="c1"># This interface enables communication with other</span>
 388    <span class="c1"># link-local Reticulum nodes over UDP. It does not</span>
 389    <span class="c1"># need any functional IP infrastructure like routers</span>
 390    <span class="c1"># or DHCP servers, but will require that at least link-</span>
 391    <span class="c1"># local IPv6 is enabled in your operating system, which</span>
 392    <span class="c1"># should be enabled by default in almost any OS. See</span>
 393    <span class="c1"># the Reticulum Manual for more configuration options.</span>
 394  
 395    <span class="p">[[</span><span class="n">Default</span> <span class="n">Interface</span><span class="p">]]</span>
 396      <span class="nb">type</span> <span class="o">=</span> <span class="n">AutoInterface</span>
 397      <span class="n">interface_enabled</span> <span class="o">=</span> <span class="kc">True</span>
 398  </pre></div>
 399  </div>
 400  <p>If Reticulum infrastructure already exists locally, you probably don’t need to
 401  change anything, and you may already be connected to a wider network. If not,
 402  you will probably need to add relevant <em>interfaces</em> to the configuration, in
 403  order to communicate with other systems.</p>
 404  <p>You can generate a much more verbose configuration example by running the command:</p>
 405  <p><code class="docutils literal notranslate"><span class="pre">rnsd</span> <span class="pre">--exampleconfig</span></code></p>
 406  <p>The output includes examples for most interface types supported
 407  by Reticulum, along with additional options and configuration parameters.</p>
 408  <p>It is a good idea to read the comments and explanations in the above default config.
 409  It will teach you the basic concepts you need to understand to configure your network.
 410  Once you have done that, take a look at the <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Interfaces</span></a> chapter
 411  of this manual.</p>
 412  </section>
 413  <section id="included-utility-programs">
 414  <h2>Included Utility Programs<a class="headerlink" href="#included-utility-programs" title="Permalink to this heading">#</a></h2>
 415  <p>Reticulum includes a range of useful utilities, both for managing your Reticulum
 416  networks, and for carrying out common tasks over Reticulum networks, such as
 417  transferring files to remote systems, and executing commands and programs remotely.</p>
 418  <p>If you often use Reticulum from several different programs, or simply want
 419  Reticulum to stay available all the time, for example if you are hosting
 420  a transport node, you might want to run Reticulum as a separate service that
 421  other programs, applications and services can utilise.</p>
 422  <section id="the-rnsd-utility">
 423  <h3>The rnsd Utility<a class="headerlink" href="#the-rnsd-utility" title="Permalink to this heading">#</a></h3>
 424  <p>It is very easy to run Reticulum as a service. Simply run the included <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> command.
 425  When <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> is running, it will keep all configured interfaces open, handle transport if
 426  it is enabled, and allow any other programs to immediately utilise the
 427  Reticulum network it is configured for.</p>
 428  <p>You can even run multiple instances of <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> with different configurations on
 429  the same system.</p>
 430  <p><strong>Usage Examples</strong></p>
 431  <p>Run <code class="docutils literal notranslate"><span class="pre">rnsd</span></code>:</p>
 432  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnsd
 433  
 434  [2023-08-18 17:59:56] [Notice] Started rnsd version 0.5.8
 435  </pre></div>
 436  </div>
 437  <p>Run <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> in service mode, ensuring all logging output is sent directly to file:</p>
 438  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnsd -s
 439  </pre></div>
 440  </div>
 441  <p>Generate a verbose and detailed configuration example, with explanations of all the
 442  various configuration options, and interface configuration examples:</p>
 443  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnsd --exampleconfig
 444  </pre></div>
 445  </div>
 446  <p><strong>All Command-Line Options</strong></p>
 447  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnsd.py [-h] [--config CONFIG] [-v] [-q] [-s] [--exampleconfig] [--version]
 448  
 449  Reticulum Network Stack Daemon
 450  
 451  options:
 452    -h, --help       show this help message and exit
 453    --config CONFIG  path to alternative Reticulum config directory
 454    -v, --verbose
 455    -q, --quiet
 456    -s, --service    rnsd is running as a service and should log to file
 457    --exampleconfig  print verbose configuration example to stdout and exit
 458    --version        show program&#39;s version number and exit
 459  </pre></div>
 460  </div>
 461  <p>You can easily add <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as an always-on service by <a class="reference internal" href="#using-systemd"><span class="std std-ref">configuring a service</span></a>.</p>
 462  </section>
 463  <section id="the-rnstatus-utility">
 464  <h3>The rnstatus Utility<a class="headerlink" href="#the-rnstatus-utility" title="Permalink to this heading">#</a></h3>
 465  <p>Using the <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> utility, you can view the status of configured Reticulum
 466  interfaces, similar to the <code class="docutils literal notranslate"><span class="pre">ifconfig</span></code> program.</p>
 467  <p><strong>Usage Examples</strong></p>
 468  <p>Run <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code>:</p>
 469  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnstatus
 470  
 471  Shared Instance[37428]
 472     Status  : Up
 473     Serving : 1 program
 474     Rate    : 1.00 Gbps
 475     Traffic : 83.13 KB↑
 476               86.10 KB↓
 477  
 478  AutoInterface[Local]
 479     Status  : Up
 480     Mode    : Full
 481     Rate    : 10.00 Mbps
 482     Peers   : 1 reachable
 483     Traffic : 63.23 KB↑
 484               80.17 KB↓
 485  
 486  TCPInterface[RNS Testnet Dublin/dublin.connect.reticulum.network:4965]
 487     Status  : Up
 488     Mode    : Full
 489     Rate    : 10.00 Mbps
 490     Traffic : 187.27 KB↑
 491               74.17 KB↓
 492  
 493  RNodeInterface[RNode UHF]
 494     Status  : Up
 495     Mode    : Access Point
 496     Rate    : 1.30 kbps
 497     Access  : 64-bit IFAC by &lt;…e702c42ba8&gt;
 498     Traffic : 8.49 KB↑
 499               9.23 KB↓
 500  
 501  Reticulum Transport Instance &lt;5245a8efe1788c6a1cd36144a270e13b&gt; running
 502  </pre></div>
 503  </div>
 504  <p>Filter output to only show some interfaces:</p>
 505  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnstatus rnode
 506  
 507  RNodeInterface[RNode UHF]
 508     Status  : Up
 509     Mode    : Access Point
 510     Rate    : 1.30 kbps
 511     Access  : 64-bit IFAC by &lt;…e702c42ba8&gt;
 512     Traffic : 8.49 KB↑
 513               9.23 KB↓
 514  
 515  Reticulum Transport Instance &lt;5245a8efe1788c6a1cd36144a270e13b&gt; running
 516  </pre></div>
 517  </div>
 518  <p><strong>All Command-Line Options</strong></p>
 519  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnstatus [-h] [--config CONFIG] [--version] [-a] [-A]
 520                  [-l] [-s SORT] [-r] [-j] [-R hash] [-i path]
 521                  [-w seconds] [-v] [filter]
 522  
 523  Reticulum Network Stack Status
 524  
 525  positional arguments:
 526    filter                only display interfaces with names including filter
 527  
 528  options:
 529    -h, --help            show this help message and exit
 530    --config CONFIG       path to alternative Reticulum config directory
 531    --version             show program&#39;s version number and exit
 532    -a, --all             show all interfaces
 533    -A, --announce-stats  show announce stats
 534    -l, --link-stats      show link stats
 535    -s SORT, --sort SORT  sort interfaces by [rate, traffic, rx, tx, announces, arx, atx, held]
 536    -r, --reverse         reverse sorting
 537    -j, --json            output in JSON format
 538    -R hash               transport identity hash of remote instance to get status from (requires -i)
 539    -i path               path to identity used for remote management
 540    -w seconds            timeout before giving up on remote queries
 541    -v, --verbose
 542  </pre></div>
 543  </div>
 544  <div class="admonition note">
 545  <p class="admonition-title">Note</p>
 546  <p>When using <code class="docutils literal notranslate"><span class="pre">-R</span></code> to query a remote transport instance, you must also specify <code class="docutils literal notranslate"><span class="pre">-i</span></code> with the path to a management identity file that is authorized for remote management on the target system.</p>
 547  </div>
 548  </section>
 549  <section id="the-rnid-utility">
 550  <h3>The rnid Utility<a class="headerlink" href="#the-rnid-utility" title="Permalink to this heading">#</a></h3>
 551  <p>With the <code class="docutils literal notranslate"><span class="pre">rnid</span></code> utility, you can generate, manage and view Reticulum Identities.
 552  The program can also calculate Destination hashes, and perform encryption and
 553  decryption of files.</p>
 554  <p>Using <code class="docutils literal notranslate"><span class="pre">rnid</span></code>, it is possible to asymmetrically encrypt files and information for
 555  any Reticulum destination hash, and also to create and verify cryptographic signatures.</p>
 556  <p><strong>Usage Examples</strong></p>
 557  <p>Generate a new Identity:</p>
 558  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnid -g ./new_identity
 559  </pre></div>
 560  </div>
 561  <p>Display Identity key information:</p>
 562  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnid -i ./new_identity -p
 563  
 564  Loaded Identity &lt;984b74a3f768bef236af4371e6f248cd&gt; from new_id
 565  Public Key  : 0f4259fef4521ab75a3409e353fe9073eb10783b4912a6a9937c57bf44a62c1e
 566  Private Key : Hidden
 567  </pre></div>
 568  </div>
 569  <p>Encrypt a file for an LXMF user:</p>
 570  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnid -i 8dd57a738226809646089335a6b03695 -e my_file.txt
 571  
 572  Recalled Identity &lt;bc7291552be7a58f361522990465165c&gt; for destination &lt;8dd57a738226809646089335a6b03695&gt;
 573  Encrypting my_file.txt
 574  File my_file.txt encrypted for &lt;bc7291552be7a58f361522990465165c&gt; to my_file.txt.rfe
 575  </pre></div>
 576  </div>
 577  <p>If the Identity for the destination is not already known, you can fetch it from the network by using the <code class="docutils literal notranslate"><span class="pre">-R</span></code> command-line option:</p>
 578  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnid -R -i 30602def3b3506a28ed33db6f60cc6c9 -e my_file.txt
 579  
 580  Requesting unknown Identity for &lt;30602def3b3506a28ed33db6f60cc6c9&gt;...
 581  Received Identity &lt;2b489d06eaf7c543808c76a5332a447d&gt; for destination &lt;30602def3b3506a28ed33db6f60cc6c9&gt; from the network
 582  Encrypting my_file.txt
 583  File my_file.txt encrypted for &lt;2b489d06eaf7c543808c76a5332a447d&gt; to my_file.txt.rfe
 584  </pre></div>
 585  </div>
 586  <p>Decrypt a file using the Reticulum Identity it was encrypted for:</p>
 587  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnid -i ./my_identity -d my_file.txt.rfe
 588  
 589  Loaded Identity &lt;2225fdeecaf6e2db4556c3c2d7637294&gt; from ./my_identity
 590  Decrypting ./my_file.txt.rfe...
 591  File ./my_file.txt.rfe decrypted with &lt;2225fdeecaf6e2db4556c3c2d7637294&gt; to ./my_file.txt
 592  </pre></div>
 593  </div>
 594  <p><strong>All Command-Line Options</strong></p>
 595  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnid.py [-h] [--config path] [-i identity] [-g path] [-v] [-q] [-a aspects]
 596                 [-H aspects] [-e path] [-d path] [-s path] [-V path] [-r path] [-w path]
 597                 [-f] [-R] [-t seconds] [-p] [-P] [--version]
 598  
 599  Reticulum Identity &amp; Encryption Utility
 600  
 601  options:
 602    -h, --help            show this help message and exit
 603    --config path         path to alternative Reticulum config directory
 604    -i identity, --identity identity
 605                          hexadecimal Reticulum Destination hash or path to Identity file
 606    -g path, --generate path
 607                          generate a new Identity
 608    -v, --verbose         increase verbosity
 609    -q, --quiet           decrease verbosity
 610    -a aspects, --announce aspects
 611                          announce a destination based on this Identity
 612    -H aspects, --hash aspects
 613                          show destination hashes for other aspects for this Identity
 614    -e path, --encrypt path
 615                          encrypt file
 616    -d path, --decrypt path
 617                          decrypt file
 618    -s path, --sign path  sign file
 619    -V path, --validate path
 620                          validate signature
 621    -r path, --read path  input file path
 622    -w path, --write path
 623                          output file path
 624    -f, --force           write output even if it overwrites existing files
 625    -R, --request         request unknown Identities from the network
 626    -t seconds            identity request timeout before giving up
 627    -p, --print-identity  print identity info and exit
 628    -P, --print-private   allow displaying private keys
 629    --version             show program&#39;s version number and exit
 630  </pre></div>
 631  </div>
 632  </section>
 633  <section id="the-rnpath-utility">
 634  <h3>The rnpath Utility<a class="headerlink" href="#the-rnpath-utility" title="Permalink to this heading">#</a></h3>
 635  <p>With the <code class="docutils literal notranslate"><span class="pre">rnpath</span></code> utility, you can look up and view paths for
 636  destinations on the Reticulum network.</p>
 637  <p><strong>Usage Examples</strong></p>
 638  <p>Resolve path to a destination:</p>
 639  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnpath c89b4da064bf66d280f0e4d8abfd9806
 640  
 641  Path found, destination &lt;c89b4da064bf66d280f0e4d8abfd9806&gt; is 4 hops away via &lt;f53a1c4278e0726bb73fcc623d6ce763&gt; on TCPInterface[Testnet/dublin.connect.reticulum.network:4965]
 642  </pre></div>
 643  </div>
 644  <p><strong>All Command-Line Options</strong></p>
 645  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnpath [-h] [--config CONFIG] [--version] [-t] [-m hops]
 646                [-r] [-d] [-D] [-x] [-w seconds] [-R hash] [-i path]
 647                [-W seconds] [-j] [-v] [destination]
 648  
 649  Reticulum Path Discovery Utility
 650  
 651  positional arguments:
 652    destination           hexadecimal hash of the destination
 653  
 654  options:
 655    -h, --help            show this help message and exit
 656    --config CONFIG       path to alternative Reticulum config directory
 657    --version             show program&#39;s version number and exit
 658    -t, --table           show all known paths
 659    -m hops, --max hops   maximum hops to filter path table by
 660    -r, --rates           show announce rate info
 661    -d, --drop            remove the path to a destination
 662    -D, --drop-announces  drop all queued announces
 663    -x, --drop-via        drop all paths via specified transport instance
 664    -w seconds            timeout before giving up
 665    -R hash               transport identity hash of remote instance to manage
 666    -i path               path to identity used for remote management
 667    -W seconds            timeout before giving up on remote queries
 668    -j, --json            output in JSON format
 669    -v, --verbose
 670  </pre></div>
 671  </div>
 672  </section>
 673  <section id="the-rnprobe-utility">
 674  <h3>The rnprobe Utility<a class="headerlink" href="#the-rnprobe-utility" title="Permalink to this heading">#</a></h3>
 675  <p>The <code class="docutils literal notranslate"><span class="pre">rnprobe</span></code> utility lets you probe a destination for connectivity, similar
 676  to the <code class="docutils literal notranslate"><span class="pre">ping</span></code> program. Please note that probes will only be answered if the
 677  specified destination is configured to send proofs for received packets. Many
 678  destinations will not have this option enabled, so most destinations will not
 679  be probable.</p>
 680  <p>You can enable a probe-reply destination on Reticulum Transport Instances by
 681  setting the <code class="docutils literal notranslate"><span class="pre">respond_to_probes</span></code> configuration directive. Reticulum will then
 682  print the probe destination to the log on Transport Instance startup.</p>
 683  <p><strong>Usage Examples</strong></p>
 684  <p>Probe a destination:</p>
 685  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnprobe rnstransport.probe 2d03725b327348980d570f739a3a5708
 686  
 687  Sent 16 byte probe to &lt;2d03725b327348980d570f739a3a5708&gt;
 688  Valid reply received from &lt;2d03725b327348980d570f739a3a5708&gt;
 689  Round-trip time is 38.469 milliseconds over 2 hops
 690  </pre></div>
 691  </div>
 692  <p>Send a larger probe:</p>
 693  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnprobe rnstransport.probe 2d03725b327348980d570f739a3a5708 -s 256
 694  
 695  Sent 16 byte probe to &lt;2d03725b327348980d570f739a3a5708&gt;
 696  Valid reply received from &lt;2d03725b327348980d570f739a3a5708&gt;
 697  Round-trip time is 38.781 milliseconds over 2 hops
 698  </pre></div>
 699  </div>
 700  <p>If the interface that receives the probe replies supports reporting radio
 701  parameters such as <strong>RSSI</strong> and <strong>SNR</strong>, the <code class="docutils literal notranslate"><span class="pre">rnprobe</span></code> utility will print
 702  these as part of the result as well.</p>
 703  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnprobe rnstransport.probe e7536ee90bd4a440e130490b87a25124
 704  
 705  Sent 16 byte probe to &lt;e7536ee90bd4a440e130490b87a25124&gt;
 706  Valid reply received from &lt;e7536ee90bd4a440e130490b87a25124&gt;
 707  Round-trip time is 1.809 seconds over 1 hop [RSSI -73 dBm] [SNR 12.0 dB]
 708  </pre></div>
 709  </div>
 710  <p><strong>All Command-Line Options</strong></p>
 711  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnprobe [-h] [--config CONFIG] [-s SIZE] [-n PROBES]
 712                 [-t seconds] [-w seconds] [--version] [-v]
 713                 [full_name] [destination_hash]
 714  
 715  Reticulum Probe Utility
 716  
 717  positional arguments:
 718    full_name             full destination name in dotted notation
 719    destination_hash      hexadecimal hash of the destination
 720  
 721  options:
 722    -h, --help            show this help message and exit
 723    --config CONFIG       path to alternative Reticulum config directory
 724    -s SIZE, --size SIZE  size of probe packet payload in bytes
 725    -n PROBES, --probes PROBES
 726                          number of probes to send
 727    -t seconds, --timeout seconds
 728                          timeout before giving up
 729    -w seconds, --wait seconds
 730                          time between each probe
 731    --version             show program&#39;s version number and exit
 732    -v, --verbose
 733  </pre></div>
 734  </div>
 735  </section>
 736  <section id="the-rncp-utility">
 737  <h3>The rncp Utility<a class="headerlink" href="#the-rncp-utility" title="Permalink to this heading">#</a></h3>
 738  <p>The <code class="docutils literal notranslate"><span class="pre">rncp</span></code> utility is a simple file transfer tool. Using it, you can transfer
 739  files through Reticulum.</p>
 740  <p><strong>Usage Examples</strong></p>
 741  <p>Run rncp on the receiving system, specifying which identities are allowed to send files:</p>
 742  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rncp --listen -a 1726dbad538775b5bf9b0ea25a4079c8 -a c50cc4e4f7838b6c31f60ab9032cbc62
 743  </pre></div>
 744  </div>
 745  <p>You can also specify allowed identity hashes (one per line) in the file ~/.rncp/allowed_identities
 746  and simply running the program in listener mode:</p>
 747  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rncp --listen
 748  </pre></div>
 749  </div>
 750  <p>From another system, copy a file to the receiving system:</p>
 751  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rncp ~/path/to/file.tgz 73cbd378bb0286ed11a707c13447bb1e
 752  </pre></div>
 753  </div>
 754  <p>Or fetch a file from the remote system:</p>
 755  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rncp --fetch ~/path/to/file.tgz 73cbd378bb0286ed11a707c13447bb1e
 756  </pre></div>
 757  </div>
 758  <p><strong>All Command-Line Options</strong></p>
 759  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rncp [-h] [--config path] [-v] [-q] [-S] [-l] [-F] [-f]
 760              [-j path] [-b seconds] [-a allowed_hash] [-n] [-p]
 761              [-w seconds] [--version] [file] [destination]
 762  
 763  Reticulum File Transfer Utility
 764  
 765  positional arguments:
 766    file                  file to be transferred
 767    destination           hexadecimal hash of the receiver
 768  
 769  options:
 770    -h, --help            show this help message and exit
 771    --config path         path to alternative Reticulum config directory
 772    -v, --verbose         increase verbosity
 773    -q, --quiet           decrease verbosity
 774    -S, --silent          disable transfer progress output
 775    -l, --listen          listen for incoming transfer requests
 776    -F, --allow-fetch     allow authenticated clients to fetch files
 777    -f, --fetch           fetch file from remote listener instead of sending
 778    -j path, --jail path  restrict fetch requests to specified path
 779    -b seconds            announce interval, 0 to only announce at startup
 780    -a allowed_hash       allow this identity
 781    -n, --no-auth         accept requests from anyone
 782    -p, --print-identity  print identity and destination info and exit
 783    -w seconds            sender timeout before giving up
 784    --version             show program&#39;s version number and exit
 785  </pre></div>
 786  </div>
 787  </section>
 788  <section id="the-rnx-utility">
 789  <h3>The rnx Utility<a class="headerlink" href="#the-rnx-utility" title="Permalink to this heading">#</a></h3>
 790  <p>The <code class="docutils literal notranslate"><span class="pre">rnx</span></code> utility is a basic remote command execution program. It allows you to
 791  execute commands on remote systems over Reticulum, and to view returned command
 792  output. For a fully interactive remote shell solution, be sure to also take a look
 793  at the <a class="reference external" href="https://github.com/acehoss/rnsh">rnsh</a> program.</p>
 794  <p><strong>Usage Examples</strong></p>
 795  <p>Run rnx on the listening system, specifying which identities are allowed to execute commands:</p>
 796  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnx --listen -a 941bed5e228775e5a8079fc38b1ccf3f -a 1b03013c25f1c2ca068a4f080b844a10
 797  </pre></div>
 798  </div>
 799  <p>From another system, run a command on the remote:</p>
 800  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnx 7a55144adf826958a9529a3bcf08b149 &quot;cat /proc/cpuinfo&quot;
 801  </pre></div>
 802  </div>
 803  <p>Or enter the interactive mode pseudo-shell:</p>
 804  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnx 7a55144adf826958a9529a3bcf08b149 -x
 805  </pre></div>
 806  </div>
 807  <p>The default identity file is stored in <code class="docutils literal notranslate"><span class="pre">~/.reticulum/identities/rnx</span></code>, but you can use
 808  another one, which will be created if it does not already exist</p>
 809  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnx 7a55144adf826958a9529a3bcf08b149 -i /path/to/identity -x
 810  </pre></div>
 811  </div>
 812  <p><strong>All Command-Line Options</strong></p>
 813  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnx [-h] [--config path] [-v] [-q] [-p] [-l] [-i identity] [-x] [-b] [-n] [-N]
 814             [-d] [-m] [-a allowed_hash] [-w seconds] [-W seconds] [--stdin STDIN]
 815             [--stdout STDOUT] [--stderr STDERR] [--version] [destination] [command]
 816  
 817  Reticulum Remote Execution Utility
 818  
 819  positional arguments:
 820    destination           hexadecimal hash of the listener
 821    command               command to be execute
 822  
 823  optional arguments:
 824    -h, --help            show this help message and exit
 825    --config path         path to alternative Reticulum config directory
 826    -v, --verbose         increase verbosity
 827    -q, --quiet           decrease verbosity
 828    -p, --print-identity  print identity and destination info and exit
 829    -l, --listen          listen for incoming commands
 830    -i identity           path to identity to use
 831    -x, --interactive     enter interactive mode
 832    -b, --no-announce     don&#39;t announce at program start
 833    -a allowed_hash       accept from this identity
 834    -n, --noauth          accept files from anyone
 835    -N, --noid            don&#39;t identify to listener
 836    -d, --detailed        show detailed result output
 837    -m                    mirror exit code of remote command
 838    -w seconds            connect and request timeout before giving up
 839    -W seconds            max result download time
 840    --stdin STDIN         pass input to stdin
 841    --stdout STDOUT       max size in bytes of returned stdout
 842    --stderr STDERR       max size in bytes of returned stderr
 843    --version             show program&#39;s version number and exit
 844  </pre></div>
 845  </div>
 846  </section>
 847  <section id="the-rnodeconf-utility">
 848  <h3>The rnodeconf Utility<a class="headerlink" href="#the-rnodeconf-utility" title="Permalink to this heading">#</a></h3>
 849  <p>The <code class="docutils literal notranslate"><span class="pre">rnodeconf</span></code> utility allows you to inspect and configure existing <a class="reference internal" href="hardware.html#rnode-main"><span class="std std-ref">RNodes</span></a>, and
 850  to create and provision new <a class="reference internal" href="hardware.html#rnode-main"><span class="std std-ref">RNodes</span></a> from any supported hardware devices.</p>
 851  <p><strong>All Command-Line Options</strong></p>
 852  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnodeconf [-h] [-i] [-a] [-u] [-U] [--fw-version version]
 853                   [--fw-url url] [--nocheck] [-e] [-E] [-C]
 854                   [--baud-flash baud_flash] [-N] [-T] [-b] [-B] [-p] [-D i]
 855                   [--display-addr byte] [--freq Hz] [--bw Hz] [--txp dBm]
 856                   [--sf factor] [--cr rate] [--eeprom-backup] [--eeprom-dump]
 857                   [--eeprom-wipe] [-P] [--trust-key hexbytes] [--version] [-f]
 858                   [-r] [-k] [-S] [-H FIRMWARE_HASH] [--platform platform]
 859                   [--product product] [--model model] [--hwrev revision]
 860                   [port]
 861  
 862  RNode Configuration and firmware utility. This program allows you to change
 863  various settings and startup modes of RNode. It can also install, flash and
 864  update the firmware on supported devices.
 865  
 866  positional arguments:
 867    port                  serial port where RNode is attached
 868  
 869  options:
 870    -h, --help            show this help message and exit
 871    -i, --info            Show device info
 872    -a, --autoinstall     Automatic installation on various supported devices
 873    -u, --update          Update firmware to the latest version
 874    -U, --force-update    Update to specified firmware even if version matches
 875                          or is older than installed version
 876    --fw-version version  Use a specific firmware version for update or
 877                          autoinstall
 878    --fw-url url          Use an alternate firmware download URL
 879    --nocheck             Don&#39;t check for firmware updates online
 880    -e, --extract         Extract firmware from connected RNode for later use
 881    -E, --use-extracted   Use the extracted firmware for autoinstallation or
 882                          update
 883    -C, --clear-cache     Clear locally cached firmware files
 884    --baud-flash baud_flash
 885                          Set specific baud rate when flashing device. Default
 886                          is 921600
 887    -N, --normal          Switch device to normal mode
 888    -T, --tnc             Switch device to TNC mode
 889    -b, --bluetooth-on    Turn device bluetooth on
 890    -B, --bluetooth-off   Turn device bluetooth off
 891    -p, --bluetooth-pair  Put device into bluetooth pairing mode
 892    -D i, --display i     Set display intensity (0-255)
 893    --display-addr byte   Set display address as hex byte (00 - FF)
 894    --freq Hz             Frequency in Hz for TNC mode
 895    --bw Hz               Bandwidth in Hz for TNC mode
 896    --txp dBm             TX power in dBm for TNC mode
 897    --sf factor           Spreading factor for TNC mode (7 - 12)
 898    --cr rate             Coding rate for TNC mode (5 - 8)
 899    --eeprom-backup       Backup EEPROM to file
 900    --eeprom-dump         Dump EEPROM to console
 901    --eeprom-wipe         Unlock and wipe EEPROM
 902    -P, --public          Display public part of signing key
 903    --trust-key hexbytes  Public key to trust for device verification
 904    --version             Print program version and exit
 905    -f, --flash           Flash firmware and bootstrap EEPROM
 906    -r, --rom             Bootstrap EEPROM without flashing firmware
 907    -k, --key             Generate a new signing key and exit
 908    -S, --sign            Display public part of signing key
 909    -H FIRMWARE_HASH, --firmware-hash FIRMWARE_HASH
 910                          Display installed firmware hash
 911    --platform platform   Platform specification for device bootstrap
 912    --product product     Product specification for device bootstrap
 913    --model model         Model code for device bootstrap
 914    --hwrev revision      Hardware revision for device bootstrap
 915  </pre></div>
 916  </div>
 917  <p>For more information on how to create your own RNodes, please read the <a class="reference internal" href="hardware.html#rnode-creating"><span class="std std-ref">Creating RNodes</span></a>
 918  section of this manual.</p>
 919  </section>
 920  </section>
 921  <section id="remote-management">
 922  <h2>Remote Management<a class="headerlink" href="#remote-management" title="Permalink to this heading">#</a></h2>
 923  <p>It is possible to allow remote management of Reticulum
 924  systems using the various built-in utilities, such as
 925  <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> and <code class="docutils literal notranslate"><span class="pre">rnpath</span></code>. To do so, you will need to set
 926  the <code class="docutils literal notranslate"><span class="pre">enable_remote_management</span></code> directive in the <code class="docutils literal notranslate"><span class="pre">[reticulum]</span></code>
 927  section of the configuration file. You will also need to specify
 928  one or more Reticulum Identity hashes for authenticating the
 929  queries from client programs. For this purpose, you can use
 930  existing identity files, or generate new ones with the rnid utility.</p>
 931  <p>The following is a truncated example of enabling remote management
 932  in the Reticulum configuration file:</p>
 933  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[reticulum]
 934  ...
 935  enable_remote_management = yes
 936  remote_management_allowed = 9fb6d773498fb3feda407ed8ef2c3229, 2d882c5586e548d79b5af27bca1776dc
 937  ...
 938  </pre></div>
 939  </div>
 940  <p>For a complete example configuration, you can run <code class="docutils literal notranslate"><span class="pre">rnsd</span> <span class="pre">--exampleconfig</span></code>.</p>
 941  </section>
 942  <section id="improving-system-configuration">
 943  <h2>Improving System Configuration<a class="headerlink" href="#improving-system-configuration" title="Permalink to this heading">#</a></h2>
 944  <p>If you are setting up a system for permanent use with Reticulum, there is a
 945  few system configuration changes that can make this easier to administrate.
 946  These changes will be detailed here.</p>
 947  <section id="fixed-serial-port-names">
 948  <h3>Fixed Serial Port Names<a class="headerlink" href="#fixed-serial-port-names" title="Permalink to this heading">#</a></h3>
 949  <p>On a Reticulum instance with several serial port based interfaces, it can be
 950  beneficial to use the fixed device names for the serial ports, instead
 951  of the dynamically allocated shorthands such as <code class="docutils literal notranslate"><span class="pre">/dev/ttyUSB0</span></code>. Under most
 952  Debian-based distributions, including Ubuntu and Raspberry Pi OS, these nodes
 953  can be found under <code class="docutils literal notranslate"><span class="pre">/dev/serial/by-id</span></code>.</p>
 954  <p>You can use such a device path directly in place of the numbered shorthands.
 955  Here is an example of a packet radio TNC configured as such:</p>
 956  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[[Packet Radio KISS Interface]]
 957    type = KISSInterface
 958    interface_enabled = True
 959    outgoing = true
 960    port = /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_43891CKM-if00-port0
 961    speed = 115200
 962    databits = 8
 963    parity = none
 964    stopbits = 1
 965    preamble = 150
 966    txtail = 10
 967    persistence = 200
 968    slottime = 20
 969  </pre></div>
 970  </div>
 971  <p>Using this methodology avoids potential naming mix-ups where physical devices
 972  might be plugged and unplugged in different orders, or when device name
 973  assignment varies from one boot to another.</p>
 974  </section>
 975  <section id="reticulum-as-a-system-service">
 976  <span id="using-systemd"></span><h3>Reticulum as a System Service<a class="headerlink" href="#reticulum-as-a-system-service" title="Permalink to this heading">#</a></h3>
 977  <p>Instead of starting Reticulum manually, you can install <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as a system
 978  service and have it start automatically at boot.</p>
 979  <section id="systemwide-service">
 980  <h4>Systemwide Service<a class="headerlink" href="#systemwide-service" title="Permalink to this heading">#</a></h4>
 981  <p>If you installed Reticulum with <code class="docutils literal notranslate"><span class="pre">pip</span></code>, the <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> program will most likely
 982  be located in a user-local installation path only, which means <code class="docutils literal notranslate"><span class="pre">systemd</span></code> will not
 983  be able to execute it. In this case, you can simply symlink the <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> program
 984  into a directory that is in systemd’s path:</p>
 985  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>sudo ln -s $(which rnsd) /usr/local/bin/
 986  </pre></div>
 987  </div>
 988  <p>You can then create the service file <code class="docutils literal notranslate"><span class="pre">/etc/systemd/system/rnsd.service</span></code> with the
 989  following content:</p>
 990  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[Unit]
 991  Description=Reticulum Network Stack Daemon
 992  After=multi-user.target
 993  
 994  [Service]
 995  # If you run Reticulum on WiFi devices,
 996  # or other devices that need some extra
 997  # time to initialise, you might want to
 998  # add a short delay before Reticulum is
 999  # started by systemd:
1000  # ExecStartPre=/bin/sleep 10
1001  Type=simple
1002  Restart=always
1003  RestartSec=3
1004  User=USERNAMEHERE
1005  ExecStart=rnsd --service
1006  
1007  [Install]
1008  WantedBy=multi-user.target
1009  </pre></div>
1010  </div>
1011  <p>Be sure to replace <code class="docutils literal notranslate"><span class="pre">USERNAMEHERE</span></code> with the user you want to run <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as.</p>
1012  <p>To manually start <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> run:</p>
1013  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>sudo systemctl start rnsd
1014  </pre></div>
1015  </div>
1016  <p>If you want to automatically start <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> at boot, run:</p>
1017  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>sudo systemctl enable rnsd
1018  </pre></div>
1019  </div>
1020  </section>
1021  <section id="userspace-service">
1022  <h4>Userspace Service<a class="headerlink" href="#userspace-service" title="Permalink to this heading">#</a></h4>
1023  <p>Alternatively you can use a user systemd service instead of a system wide one. This way the whole setup can be done as a regular user.
1024  Create a user systemd service files <code class="docutils literal notranslate"><span class="pre">~/.config/systemd/user/rnsd.service</span></code> with the following content:</p>
1025  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[Unit]
1026  Description=Reticulum Network Stack Daemon
1027  After=default.target
1028  
1029  [Service]
1030  # If you run Reticulum on WiFi devices,
1031  # or other devices that need some extra
1032  # time to initialise, you might want to
1033  # add a short delay before Reticulum is
1034  # started by systemd:
1035  # ExecStartPre=/bin/sleep 10
1036  Type=simple
1037  Restart=always
1038  RestartSec=3
1039  ExecStart=RNS_BIN_DIR/rnsd --service
1040  
1041  [Install]
1042  WantedBy=default.target
1043  </pre></div>
1044  </div>
1045  <p>Replace <code class="docutils literal notranslate"><span class="pre">RNS_BIN_DIR</span></code> with the path to your Reticulum binary directory (eg. /home/USERNAMEHERE/rns/bin).</p>
1046  <p>Start user service:</p>
1047  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>systemctl --user daemon-reload
1048  systemctl --user start rnsd.service
1049  </pre></div>
1050  </div>
1051  <p>If you want to automatically start <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> without having to log in as the USERNAMEHERE, do:</p>
1052  <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>sudo loginctl enable-linger USERNAMEHERE
1053  systemctl --user enable rnsd.service
1054  </pre></div>
1055  </div>
1056  </section>
1057  </section>
1058  </section>
1059  </section>
1060  
1061          </article>
1062        </div>
1063        <footer>
1064          
1065          <div class="related-pages">
1066            <a class="next-page" href="understanding.html">
1067                <div class="page-info">
1068                  <div class="context">
1069                    <span>Next</span>
1070                  </div>
1071                  <div class="title">Understanding Reticulum</div>
1072                </div>
1073                <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
1074              </a>
1075            <a class="prev-page" href="gettingstartedfast.html">
1076                <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
1077                <div class="page-info">
1078                  <div class="context">
1079                    <span>Previous</span>
1080                  </div>
1081                  
1082                  <div class="title">Getting Started Fast</div>
1083                  
1084                </div>
1085              </a>
1086          </div>
1087          <div class="bottom-of-page">
1088            <div class="left-details">
1089              <div class="copyright">
1090                  Copyright &#169; 2023, Mark Qvist
1091              </div>
1092              Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and 
1093              <a href="https://github.com/pradyunsg/furo">Furo</a>
1094              
1095            </div>
1096            <div class="right-details">
1097              <div class="icons">
1098                
1099              </div>
1100            </div>
1101          </div>
1102          
1103        </footer>
1104      </div>
1105      <aside class="toc-drawer">
1106        
1107        
1108        <div class="toc-sticky toc-scroll">
1109          <div class="toc-title-container">
1110            <span class="toc-title">
1111              On this page
1112            </span>
1113          </div>
1114          <div class="toc-tree-container">
1115            <div class="toc-tree">
1116              <ul>
1117  <li><a class="reference internal" href="#">Using Reticulum on Your System</a><ul>
1118  <li><a class="reference internal" href="#configuration-data">Configuration &amp; Data</a></li>
1119  <li><a class="reference internal" href="#included-utility-programs">Included Utility Programs</a><ul>
1120  <li><a class="reference internal" href="#the-rnsd-utility">The rnsd Utility</a></li>
1121  <li><a class="reference internal" href="#the-rnstatus-utility">The rnstatus Utility</a></li>
1122  <li><a class="reference internal" href="#the-rnid-utility">The rnid Utility</a></li>
1123  <li><a class="reference internal" href="#the-rnpath-utility">The rnpath Utility</a></li>
1124  <li><a class="reference internal" href="#the-rnprobe-utility">The rnprobe Utility</a></li>
1125  <li><a class="reference internal" href="#the-rncp-utility">The rncp Utility</a></li>
1126  <li><a class="reference internal" href="#the-rnx-utility">The rnx Utility</a></li>
1127  <li><a class="reference internal" href="#the-rnodeconf-utility">The rnodeconf Utility</a></li>
1128  </ul>
1129  </li>
1130  <li><a class="reference internal" href="#remote-management">Remote Management</a></li>
1131  <li><a class="reference internal" href="#improving-system-configuration">Improving System Configuration</a><ul>
1132  <li><a class="reference internal" href="#fixed-serial-port-names">Fixed Serial Port Names</a></li>
1133  <li><a class="reference internal" href="#reticulum-as-a-system-service">Reticulum as a System Service</a><ul>
1134  <li><a class="reference internal" href="#systemwide-service">Systemwide Service</a></li>
1135  <li><a class="reference internal" href="#userspace-service">Userspace Service</a></li>
1136  </ul>
1137  </li>
1138  </ul>
1139  </li>
1140  </ul>
1141  </li>
1142  </ul>
1143  
1144            </div>
1145          </div>
1146        </div>
1147        
1148        
1149      </aside>
1150    </div>
1151  </div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
1152      <script src="_static/jquery.js"></script>
1153      <script src="_static/underscore.js"></script>
1154      <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
1155      <script src="_static/doctools.js"></script>
1156      <script src="_static/sphinx_highlight.js"></script>
1157      <script src="_static/scripts/furo.js"></script>
1158      <script src="_static/clipboard.min.js"></script>
1159      <script src="_static/copybutton.js"></script>
1160      </body>
1161  </html>