{"id":874,"date":"2026-06-16T12:24:24","date_gmt":"2026-06-16T20:24:24","guid":{"rendered":"https:\/\/salemdata.net\/johnpress\/?p=874"},"modified":"2026-06-16T12:24:24","modified_gmt":"2026-06-16T20:24:24","slug":"simulating-a-mesh-network-for-reticulum-testing","status":"publish","type":"post","link":"https:\/\/salemdata.net\/johnpress\/?p=874","title":{"rendered":"Simulating A Mesh Network For Reticulum Testing"},"content":{"rendered":"<div class=\"gfmr-markdown-container\"><div class=\"gfmr-markdown-source\" style=\"display: none;\">&lt;h1&gt;Introduction&lt;\/h1&gt;\n&lt;p&gt;This article discusses radio transceivers <span id='easy-footnote-1-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-1-874' title='A transceiver is an electronic device which is a combination of a radio transmitter and a receiver, hence the name. &amp;lt;a href=&amp;quot;https:\/\/en.wikipedia.org\/wiki\/Transceiver&amp;quot;&amp;gt;Wikipedia.&amp;lt;\/a&amp;gt;'><sup>1<\/sup><\/a><\/span> that employ the &lt;a href=&quot;https:\/\/reticulum.network\/&quot;&gt;Reticulum&lt;\/a&gt; protocol. The Reticulum protocol defines the structure of bytes that are transmitted via radio, Ethernet, Bluetooth, and other forms of communication. Here, I&#8217;m addressing LoRa<span id='easy-footnote-2-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-2-874' title='LoRa (from &amp;#8220;long range&amp;#8221;) is a physical proprietary radio communication technique based on spread spectrum modulation. LoRa can be thought of as a radio signal technology, similar to Wi-Fi or cellular. Wikipedia'><sup>2<\/sup><\/a><\/span> radio protocol only. Radio transceivers using Reticulum and its LoRa interface listen for and transmit radio signals which carry packets of digital bits much like a computer&#8217;s wifi or ethernet sends packets. LoRa operates on radio bands which governments have reserved for low power transmission. Hence, the power limitation of radio communication is that you cannot broadcast above a certain power threshold so your ability to exchange packets with another transceiver can vary greatly depending upon whether you can see the other person and what physical obstacles may be in between. I&#8217;ve found I can transmit from my basement and the signal can reach several houses down the street; my transmissions cannot traverse the City of Salem. Think of LoRa transmissions as being something akin to low power walkie talkies; many consumer brands are effective only for several city blocks and then the signal attenuates or becomes weaker <span id='easy-footnote-3-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-3-874' title='In physics, attenuation is the gradual loss of flux intensity [radio power] through a medium. For instance, dark glasses attenuate sunlight, lead attenuates X-rays, and water and air attenuate both light and sound at variable attenuation rates. &amp;lt;a href=&amp;quot;https:\/\/en.wikipedia.org\/wiki\/Attenuation&amp;quot;&amp;gt;Wikipedia&amp;lt;\/a&amp;gt;'><sup>3<\/sup><\/a><\/span> Here, I look into the concept of Mesh networking and testing Reticulum&#8217;s ability to move packets across several nodes.&lt;\/p&gt;\n&lt;h1&gt;Mesh Networking&lt;\/h1&gt;\n&lt;p&gt;A &lt;b&gt;mesh network&lt;\/b&gt; is a &lt;a title=&quot;Network topology&quot; href=&quot;https:\/\/en.wikipedia.org\/wiki\/Network_topology&quot;&gt;network topology&lt;\/a&gt; in which the infrastructure &lt;a title=&quot;Node (networking)&quot; href=&quot;https:\/\/en.wikipedia.org\/wiki\/Node_(networking)&quot;&gt;nodes&lt;\/a&gt; (i.e., bridges, switches, and other infrastructure devices) connect directly, dynamically and non-hierarchically to as many other nodes as possible and cooperate with one another to efficiently route data to and from clients. <span id='easy-footnote-4-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-4-874' title=' &amp;lt;a href=&amp;quot;https:\/\/en.wikipedia.org\/wiki\/Mesh_networking&amp;quot;&amp;gt;Wikipedia: Mesh Networking&amp;lt;\/a&amp;gt;'><sup>4<\/sup><\/a><\/span> The magic of a mesh network is that you can increase the overall transmission distance between you and another transceiver who would ordinarily be out of range, but if there are other participants in the same mesh network between the two of you, your packets could be delivered with the help of the intermediate participants who forward your packets through the network to your intended recipient.&lt;\/p&gt;\n&lt;p&gt;A clever metaphor is a fire bucket brigade.\u00a0 Each person is a node passing a bucket of water to their neighbor.\u00a0 A person can only reach a couple of feet to the neighbor, it cannot reach 300 yards.\u00a0 So the the chain of people passing the bucket from one to the next give the brigade a far reach essentially transporting the water 300 yards.&lt;\/p&gt;\n&lt;img class=&quot;size-full wp-image-925&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/HopeStreet_FireBrigade_demo.jpg&quot; alt=&quot;Firefighters demonstrating a bucket brigade&quot; width=&quot;499&quot; height=&quot;333&quot; \/&gt; Los Angeles County Firefighers Demonstrating A Bucket Brigade (2019)\n&lt;p&gt;For example, using Puget Mesh, a person in Port Angeles can communicate with a person in Olympia which is approximately 125 miles away as the crow flies.&lt;\/p&gt;\n&lt;p&gt;&nbsp;&lt;\/p&gt;\n&lt;img class=&quot; wp-image-902&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_190140_Sat.png&quot; alt=&quot;Map of Puget Sound with Radio nodes&quot; width=&quot;703&quot; height=&quot;533&quot; \/&gt; &lt;a href=&quot;https:\/\/meshtastic.pugetmesh.org\/?lat=47.73193447949177&amp;lng=237.6658630371094&amp;zoom=9&quot;&gt;Map of Puget Mesh Network&lt;\/a&gt;\n&lt;p&gt;A core concept of a Mesh networks is that the limitation of the transmission distance between two units, or &#8220;nodes&#8221;, can be expanded by having other nodes also serve as intermediaries, or &#8220;transport&#8221;.\u00a0 A transport node simply forwards packets and pass along messages destined to a recipient who would normally be out of reach by the sender.\u00a0 Using the above example, here is a possible route packets travel from Port Angeles to Olympia: there are 10 intermediate nodes passing the packets to the recipient.&lt;\/p&gt;\n&lt;img class=&quot; wp-image-903&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_191012_Sat.png&quot; alt=&quot;Map with arrows showing a route through 10 nodes&quot; width=&quot;704&quot; height=&quot;525&quot; \/&gt; Hypothetical Route Through 10 Nodes\n&lt;p&gt;Thus, a participant is not only a sender and receiver, it can serve as a &#8220;transport&#8221; or broker that passes someone else&#8217;s message onto another unit, which may also be a transport node, or the final destination.&lt;\/p&gt;\n&lt;img class=&quot;size-full wp-image-900&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles.webp&quot; alt=&quot;colored diagram of three blocks with round gradients indicating loss of signal strength as the distance increases.&quot; width=&quot;800&quot; height=&quot;400&quot; \/&gt; 3 Transmitters, circles represent the outer limit of transmission capability, i.e. a 1.2 mile radius\n&lt;p&gt;In the illustration above, all three transmitters can reach about 1.2 miles before the signal is too weak to be useful or received.\u00a0 A is green and the green circle represents the perimeter of its transmission capability. Therefore,&lt;\/p&gt;\n&lt;ul&gt;\n&lt;li&gt;A (green) can reach B which is 1 mile away&lt;\/li&gt;\n&lt;li&gt;C (gold)can reach B which is 1 mile away&lt;\/li&gt;\n&lt;li&gt;B (blue) can reach A and C which are 1 mile away in opposite directions&lt;\/li&gt;\n&lt;li&gt;A cannot reach C, and C cannot reach A because they are out or range for each other.&lt;\/li&gt;\n&lt;\/ul&gt;\n&lt;h3&gt;1 Intermediary (single hop)&lt;\/h3&gt;\n&lt;p&gt;Suppose A &amp; B can reach each other, and B &amp; C can reach each other.\u00a0 But A &amp; C cannot reach each other.\u00a0 That could be the case if radio transmissions where 1.2 miles and A, B &amp; C are 2 miles apart from each other in a straight line.\u00a0 Given the nature of radio transmission, if I wanted to isolate A &amp; C, I would need to place the units 2 or more miles away from each other.\u00a0 That requirement of distance being between two transceivers makes testing very problematic.\u00a0 I do not have 6 other people at my disposal to go out onto the streets and disperse whenever I want to perform a test.&lt;\/p&gt;\n&lt;p&gt;So for lab testing, I can simulate a long distance, and thus inability to receive radio transmissions, using software and simply specify that A is prohibited from reading transmissions from C and C is prohibited from reading transmissions from A, even though they might be inches apart on my desktop.\u00a0 This artificial &#8220;block&#8221; that I program in for each unit simulates being out in the field and unable to reach each other.\u00a0 Using this software block technique, I can simulate a real time network with gaps between certain units as if they were too far apart and out of range.&lt;\/p&gt;\n&lt;p&gt;Then, the next task is: define which pairs of of units should have software blocks.\u00a0 For a 3 unit test, that&#8217;s easy, just block A-&gt;C and C-&gt;A.\u00a0 But when we expand the field of testing to include more units, the task of defining what I call &#8220;blocking pairs&#8221; becomes more challenging.&lt;\/p&gt;\n&lt;p&gt;I posed this issue to ChatGPT and it provided me with a Perl Script, &lt;a href=&quot;http:\/\/exercises\/205_sustained_link\/scripts\/line_topology_block.pl&quot;&gt;line_topology_blocks.pl&lt;\/a&gt;, where I can provide the names of my units and it will provide the blocking pair directives <span id='easy-footnote-5-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-5-874' title='I use &amp;#8220;directive&amp;#8221; to mean a compile time flag telling the compiler to do something special, e.g. create a software block between two units. An example of such a flag is to cause BOB and CY not to see each other&amp;#8217;s packets is: &amp;#8220;-D SIM_PHY_BLOCK_BOB_CY=1&amp;#8221;.\u00a0 When the compiler is presented with such a directive, it will enact a block of both of the corresponding unit on each named unit, so BOB will block DAN&amp;#8217;s transmissions and DAN will block BOB&amp;#8217;s transmissions.'><sup>5<\/sup><\/a><\/span>&lt;\/p&gt;\n&lt;p&gt;&nbsp;&lt;\/p&gt;\n&lt;p&gt;Hence, to simulate that type of topography, here is a diagram:&lt;\/p&gt;\n&lt;img class=&quot;size-full wp-image-921&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles.md-1-1.png&quot; alt=&quot;3 blocks showing AMY-BOB and BOB-CY being 1 miles apart, and AMY-CY being 2 miles apart with red arrowheads&quot; width=&quot;473&quot; height=&quot;129&quot; \/&gt; AMY-BOB-CY\n&lt;p&gt;Here is a Mermaid diagram:&lt;\/p&gt;\n&lt;img class=&quot;size-full wp-image-922&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/1_hop.md-1.png&quot; alt=&quot;3 blocks with AMY-CY blocked&quot; width=&quot;444&quot; height=&quot;129&quot; \/&gt; 1 Hop: AMY-BOB-CY\n&lt;p&gt;And here is the blocking rule:&lt;\/p&gt;\n&lt;pre&gt;# Blocking rules \r\n# -------------- \r\nALLOW AMY &lt;-&gt; BOB \r\nALLOW BOB &lt;-&gt; CY \r\nBLOCK AMY &lt;-&gt; CY\r\n\r\n&lt;\/pre&gt;\n&lt;h3&gt;3 Intermediaries (hops)&lt;\/h3&gt;\n&lt;p&gt;Suppose AMY &amp; BOB can reach each other, BOB &amp; CY can reach each other, CY &amp; DAN can reach each other and DAN &amp; ED can reach each other.\u00a0 But AMY &amp; ED cannot reach each other.\u00a0 In order to have the packet move through BOB-&gt;CY-&gt;DAN-&gt;ED, we have to create blocks so the packet doesn&#8217;t take a shorter route, e.g. CY-&gt;ED and bypass DAN.&lt;\/p&gt;\n&lt;p&gt;5 units, 3 hopsHere are the blocking rules for a 3 hop, 5 unit test:&lt;\/p&gt;\n&lt;pre&gt;# Blocking rules \r\n# -------------- \r\nALLOW AMY &lt;-&gt; BOB \r\nALLOW BOB &lt;-&gt; CY \r\nALLOW CY &lt;-&gt; DAN \r\nALLOW DAN &lt;-&gt; ED \r\nBLOCK AMY &lt;-&gt; CY \r\nBLOCK AMY &lt;-&gt; DAN \r\nBLOCK AMY &lt;-&gt; ED \r\nBLOCK BOB &lt;-&gt; DAN \r\nBLOCK BOB &lt;-&gt; ED \r\nBLOCK CY &lt;-&gt; ED&lt;\/pre&gt;\n&lt;img class=&quot;size-full wp-image-913&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_hops.md-1.png&quot; alt=&quot;diagram of 5 nodes&quot; width=&quot;784&quot; height=&quot;275&quot; \/&gt; 5 units, 3 hops\n&lt;pre&gt;&lt;\/pre&gt;\n&lt;h3&gt;5 Intermediaries (hops)&lt;\/h3&gt;\n&lt;p&gt;With 7 T-Beam, aka &#8220;nodes&#8221;, all within their respective transmissions ranges presents a network such as this.\u00a0 There would be no need for any node to serve as a transport node since all units have direct access.&lt;\/p&gt;\n&lt;img class=&quot;size-full wp-image-910&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_2.webp&quot; alt=&quot;7 phone poles in a circle all having wires to the other six&quot; width=&quot;565&quot; height=&quot;617&quot; \/&gt; 7 Telephones, all with direct lines to one another\n&lt;p&gt;&lt;strong&gt;Goal&lt;\/strong&gt;: is to isolate AMY from GUY.\u00a0 So this is the topology I want simulated: AMY&#8217;s packets must go through the other 5 nodes to reach GUY.\u00a0 This will force units BOB, CY, DAN, ED &amp; FLO to act as transports.&lt;\/p&gt;\n&lt;img class=&quot; wp-image-911&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_1.webp&quot; alt=&quot;7 telephone poles all in a chain of a single line&quot; width=&quot;598&quot; height=&quot;598&quot; \/&gt; 7 Telephones on a single line\n&lt;p&gt;With 7 units, I can force the AMY-GUY communication to route through 5 intermediaries using these blocking rules:&lt;\/p&gt;\n&lt;pre&gt;# Blocking rules\r\n# --------------\r\nALLOW AMY &lt;-&gt; BOB\r\nALLOW BOB &lt;-&gt; CY\r\nALLOW CY &lt;-&gt; DAN\r\nALLOW DAN &lt;-&gt; ED\r\nALLOW ED &lt;-&gt; FLO\r\nALLOW FLO &lt;-&gt; GUY\r\nBLOCK AMY &lt;-&gt; CY\r\nBLOCK AMY &lt;-&gt; DAN\r\nBLOCK AMY &lt;-&gt; ED\r\nBLOCK AMY &lt;-&gt; FLO\r\nBLOCK AMY &lt;-&gt; GUY\r\nBLOCK BOB &lt;-&gt; DAN\r\nBLOCK BOB &lt;-&gt; ED\r\nBLOCK BOB &lt;-&gt; FLO\r\nBLOCK BOB &lt;-&gt; GUY\r\nBLOCK CY &lt;-&gt; ED\r\nBLOCK CY &lt;-&gt; FLO\r\nBLOCK CY &lt;-&gt; GUY\r\nBLOCK DAN &lt;-&gt; FLO\r\nBLOCK DAN &lt;-&gt; GUY\r\nBLOCK ED &lt;-&gt; GUY\r\n\r\n&lt;\/pre&gt;\n&lt;p&gt;Here&#8217;s an illustration of the 7 units with paths, in blue, that are allowed, and blockers, in gray, that are implemented.&lt;\/p&gt;\n&lt;img class=&quot;size-full wp-image-967&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/seven_units-1.png&quot; alt=&quot;&quot; width=&quot;784&quot; height=&quot;386&quot; \/&gt; Seven Nodes\n&lt;h3&gt;Script To Create Blocking Diagram and Compiler Directives&lt;\/h3&gt;\n&lt;p&gt;Here is a session running &lt;a href=&quot;http:\/\/exercises\/205_sustained_link\/scripts\/line_topology_block.pl&quot;&gt;line_topology_blocks.pl&lt;\/a&gt;.\u00a0 The &lt;a href=&quot;https:\/\/mermaid.ai\/web\/&quot;&gt;Mermaid&lt;\/a&gt; portion is a technology that lets you build charts using text, in this instance, it is really helpful to quickly illustrate what is connected and what is blocked.\u00a0 Here is a screenshot showing my &lt;a href=&quot;https:\/\/github.com\/VSCodium\/vscodium&quot;&gt;VSCodium&lt;\/a&gt; <span id='easy-footnote-6-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-6-874' title='An opensource alternative to Microsoft&amp;#8217;s Visual Studio Code.'><sup>6<\/sup><\/a><\/span> session, with the &lt;em&gt;Markdown Preview Mermaid Support&lt;\/em&gt; plugin displaying my markdown recipe.&lt;\/p&gt;\n&lt;img class=&quot;size-full wp-image-918&quot; src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_204102_Sat.png&quot; alt=&quot;VSCodium desktop with markdown file and preview image&quot; width=&quot;828&quot; height=&quot;764&quot; \/&gt; Mermaid Preview in VSCodium\n&lt;div class=&quot;reticulum-ansi-console&quot;&gt;\n&lt;pre class=&quot;ansi2html-content&quot;&gt;Script started on 2026-06-13 01:39:45-07:00 [TERM=&quot;xterm-256color&quot; TTY=&quot;\/dev\/pts\/3&quot; COLUMNS=&quot;178&quot; LINES=&quot;26&quot;]\r\n&lt;span class=&quot;ansi38-15 ansi48-237&quot;&gt;[ rnsenv|script ]&lt;\/span&gt; &lt;span class=&quot;ansi1 ansi32&quot;&gt;jlpoole@jp&lt;\/span&gt;&lt;\/pre&gt;\n&lt;pre class=&quot;ansi2html-content&quot;&gt;&quot;ansi1 ansi34&quot;&gt; \/usr\/local\/src\/microreticulum\/microReticulumTbeam\/exercises\/205_sustained_link\/scripts $ date\r\n\r\nSat Jun 13 01:39:47 PDT 2026\r\n&lt;span class=&quot;ansi38-15 ansi48-237&quot;&gt;[ rnsenv|script ]&lt;\/span&gt; &lt;span class=&quot;ansi1 ansi32&quot;&gt;jlpoole@jp&lt;\/span&gt;&lt;span class=&quot;ansi1 ansi34&quot;&gt; \/usr\/local\/src\/microreticulum\/microReticulumTbeam\/exercises\/205_sustained_link\/scripts $&lt;\/span&gt; date makescript topology_block.\/line_topology_block.pl AMY BOB  CY DAN ED FLO GUY\r\n\r\n# Blocking rules\r\n# --------------\r\nALLOW AMY &lt;-&gt; BOB\r\nALLOW BOB &lt;-&gt; CY\r\nALLOW CY &lt;-&gt; DAN\r\nALLOW DAN &lt;-&gt; ED\r\nALLOW ED &lt;-&gt; FLO\r\nALLOW FLO &lt;-&gt; GUY\r\nBLOCK AMY &lt;-&gt; CY\r\nBLOCK AMY &lt;-&gt; DAN\r\nBLOCK AMY &lt;-&gt; ED\r\nBLOCK AMY &lt;-&gt; FLO\r\nBLOCK AMY &lt;-&gt; GUY\r\nBLOCK BOB &lt;-&gt; DAN\r\nBLOCK BOB &lt;-&gt; ED\r\nBLOCK BOB &lt;-&gt; FLO\r\nBLOCK BOB &lt;-&gt; GUY\r\nBLOCK CY &lt;-&gt; ED\r\nBLOCK CY &lt;-&gt; FLO\r\nBLOCK CY &lt;-&gt; GUY\r\nBLOCK DAN &lt;-&gt; FLO\r\nBLOCK DAN &lt;-&gt; GUY\r\nBLOCK ED &lt;-&gt; GUY\r\n\r\n# platformio.ini block directives\r\n# -------------------------------\r\n; Declare any blocked physical pairs here. The build script converts all\r\n; enabled SIM_PHY_BLOCK_&lt;UNIT&gt;_&lt;UNIT&gt; definitions into a generic matrix.\r\n-D SIM_PHY_BLOCK_AMY_CY=1\r\n-D SIM_PHY_BLOCK_AMY_DAN=1\r\n-D SIM_PHY_BLOCK_AMY_ED=1\r\n-D SIM_PHY_BLOCK_AMY_FLO=1\r\n-D SIM_PHY_BLOCK_AMY_GUY=1\r\n-D SIM_PHY_BLOCK_BOB_DAN=1\r\n-D SIM_PHY_BLOCK_BOB_ED=1\r\n-D SIM_PHY_BLOCK_BOB_FLO=1\r\n-D SIM_PHY_BLOCK_BOB_GUY=1\r\n-D SIM_PHY_BLOCK_CY_ED=1\r\n-D SIM_PHY_BLOCK_CY_FLO=1\r\n-D SIM_PHY_BLOCK_CY_GUY=1\r\n-D SIM_PHY_BLOCK_DAN_FLO=1\r\n-D SIM_PHY_BLOCK_DAN_GUY=1\r\n-D SIM_PHY_BLOCK_ED_GUY=1\r\n\r\n# Mermaid\r\n# -------\r\n```mermaid\r\nflowchart LR\r\n    AMY talk_001@&lt;-- Talk --&gt; BOB\r\n    BOB talk_002@&lt;-- Talk --&gt; CY\r\n    CY talk_003@&lt;-- Talk --&gt; DAN\r\n    DAN talk_004@&lt;-- Talk --&gt; ED\r\n    ED talk_005@&lt;-- Talk --&gt; FLO\r\n    FLO talk_006@&lt;-- Talk --&gt; GUY\r\n    AMY blocked_007@-. Blocked .-CY\r\n    AMY blocked_008@-. Blocked .-DAN\r\n    AMY blocked_009@-. Blocked .-ED\r\n    AMY blocked_010@-. Blocked .-FLO\r\n    AMY blocked_011@-. Blocked .-GUY\r\n    BOB blocked_012@-. Blocked .-DAN\r\n    BOB blocked_013@-. Blocked .-ED\r\n    BOB blocked_014@-. Blocked .-FLO\r\n    BOB blocked_015@-. Blocked .-GUY\r\n    CY blocked_016@-. Blocked .-ED\r\n    CY blocked_017@-. Blocked .-FLO\r\n    CY blocked_018@-. Blocked .-GUY\r\n    DAN blocked_019@-. Blocked .-FLO\r\n    DAN blocked_020@-. Blocked .-GUY\r\n    ED blocked_021@-. Blocked .-GUY\r\n\r\n    classDef talk stroke:blue,stroke-width:2px,color:green;\r\n    classDef blocked stroke:#A9A9A9,stroke-width:2px,color:#A9A9A9,stroke-dasharray:5 5;\r\n    class talk_001,talk_002,talk_003,talk_004,talk_005,talk_006 talk\r\n    class blocked_007,blocked_008,blocked_009,blocked_010,blocked_011,blocked_012,blocked_013,blocked_014,blocked_015,blocked_016,blocked_017,blocked_018,blocked_019,blocked_020,blocked_021 blocked\r\n```\r\n&lt;span class=&quot;ansi38-15 ansi48-237&quot;&gt;[ rnsenv|script ]&lt;\/span&gt; &lt;span class=&quot;ansi1 ansi32&quot;&gt;jlpoole@jp&lt;\/span&gt;&lt;span class=&quot;ansi1 ansi34&quot;&gt; \/usr\/local\/src\/microreticulum\/microReticulumTbeam\/exercises\/205_sustained_link\/scripts $&lt;\/span&gt; exit\r\n\r\nexit\r\n\r\nScript done on 2026-06-13 01:39:55-07:00 [COMMAND_EXIT_CODE=&quot;0&quot;]\r\n\r\n&lt;\/pre&gt;\n&lt;\/div&gt;\n<\/div><div class=\"gfmr-markdown-rendered\"><h1>Introduction<\/h1>\n<p>This article discusses radio transceivers <span id='easy-footnote-7-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-7-874' title='A transceiver is an electronic device which is a combination of a radio transmitter and a receiver, hence the name. &lt;a href=&quot;https:\/\/en.wikipedia.org\/wiki\/Transceiver&quot;&gt;Wikipedia.&lt;\/a&gt;'><sup>7<\/sup><\/a><\/span> that employ the <a href=\"https:\/\/reticulum.network\/\">Reticulum<\/a> protocol. The Reticulum protocol defines the structure of bytes that are transmitted via radio, Ethernet, Bluetooth, and other forms of communication. Here, I&#8217;m addressing LoRa<span id='easy-footnote-8-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-8-874' title='LoRa (from &amp;#8220;long range&amp;#8221;) is a physical proprietary radio communication technique based on spread spectrum modulation. LoRa can be thought of as a radio signal technology, similar to Wi-Fi or cellular. Wikipedia'><sup>8<\/sup><\/a><\/span> radio protocol only. Radio transceivers using Reticulum and its LoRa interface listen for and transmit radio signals which carry packets of digital bits much like a computer&#8217;s wifi or ethernet sends packets. LoRa operates on radio bands which governments have reserved for low power transmission. Hence, the power limitation of radio communication is that you cannot broadcast above a certain power threshold so your ability to exchange packets with another transceiver can vary greatly depending upon whether you can see the other person and what physical obstacles may be in between. I&#8217;ve found I can transmit from my basement and the signal can reach several houses down the street; my transmissions cannot traverse the City of Salem. Think of LoRa transmissions as being something akin to low power walkie talkies; many consumer brands are effective only for several city blocks and then the signal attenuates or becomes weaker <span id='easy-footnote-9-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-9-874' title='In physics, attenuation is the gradual loss of flux intensity [radio power] through a medium. For instance, dark glasses attenuate sunlight, lead attenuates X-rays, and water and air attenuate both light and sound at variable attenuation rates. &lt;a href=&quot;https:\/\/en.wikipedia.org\/wiki\/Attenuation&quot;&gt;Wikipedia&lt;\/a&gt;'><sup>9<\/sup><\/a><\/span> Here, I look into the concept of Mesh networking and testing Reticulum&#8217;s ability to move packets across several nodes.<\/p>\n<h1>Mesh Networking<\/h1>\n<p>A <b>mesh network<\/b> is a <a title=\"Network topology\" href=\"https:\/\/en.wikipedia.org\/wiki\/Network_topology\">network topology<\/a> in which the infrastructure <a title=\"Node (networking)\" href=\"https:\/\/en.wikipedia.org\/wiki\/Node_(networking)\">nodes<\/a> (i.e., bridges, switches, and other infrastructure devices) connect directly, dynamically and non-hierarchically to as many other nodes as possible and cooperate with one another to efficiently route data to and from clients. <span id='easy-footnote-10-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-10-874' title=' &lt;a href=&quot;https:\/\/en.wikipedia.org\/wiki\/Mesh_networking&quot;&gt;Wikipedia: Mesh Networking&lt;\/a&gt;'><sup>10<\/sup><\/a><\/span> The magic of a mesh network is that you can increase the overall transmission distance between you and another transceiver who would ordinarily be out of range, but if there are other participants in the same mesh network between the two of you, your packets could be delivered with the help of the intermediate participants who forward your packets through the network to your intended recipient.<\/p>\n<p>A clever metaphor is a fire bucket brigade.\u00a0 Each person is a node passing a bucket of water to their neighbor.\u00a0 A person can only reach a couple of feet to the neighbor, it cannot reach 300 yards.\u00a0 So the the chain of people passing the bucket from one to the next give the brigade a far reach essentially transporting the water 300 yards.<\/p>\n<figure id=\"attachment_925\" aria-describedby=\"caption-attachment-925\" style=\"width: 499px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-925\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/HopeStreet_FireBrigade_demo.jpg\" alt=\"Firefighters demonstrating a bucket brigade\" width=\"499\" height=\"333\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/HopeStreet_FireBrigade_demo.jpg 499w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/HopeStreet_FireBrigade_demo-300x200.jpg 300w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><figcaption id=\"caption-attachment-925\" class=\"wp-caption-text\">Los Angeles County Firefighers Demonstrating A Bucket Brigade (2019)<\/figcaption><\/figure>\n<p>For example, using Puget Mesh, a person in Port Angeles can communicate with a person in Olympia which is approximately 125 miles away as the crow flies.<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_902\" aria-describedby=\"caption-attachment-902\" style=\"width: 703px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-902\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_190140_Sat.png\" alt=\"Map of Puget Sound with Radio nodes\" width=\"703\" height=\"533\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_190140_Sat.png 1213w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_190140_Sat-300x228.png 300w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_190140_Sat-768x582.png 768w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><figcaption id=\"caption-attachment-902\" class=\"wp-caption-text\"><a href=\"https:\/\/meshtastic.pugetmesh.org\/?lat=47.73193447949177&amp;lng=237.6658630371094&amp;zoom=9\">Map of Puget Mesh Network<\/a><\/figcaption><\/figure>\n<p>A core concept of a Mesh networks is that the limitation of the transmission distance between two units, or &#8220;nodes&#8221;, can be expanded by having other nodes also serve as intermediaries, or &#8220;transport&#8221;.\u00a0 A transport node simply forwards packets and pass along messages destined to a recipient who would normally be out of reach by the sender.\u00a0 Using the above example, here is a possible route packets travel from Port Angeles to Olympia: there are 10 intermediate nodes passing the packets to the recipient.<\/p>\n<figure id=\"attachment_903\" aria-describedby=\"caption-attachment-903\" style=\"width: 704px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-903\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_191012_Sat.png\" alt=\"Map with arrows showing a route through 10 nodes\" width=\"704\" height=\"525\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_191012_Sat.png 1217w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_191012_Sat-300x224.png 300w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_191012_Sat-768x573.png 768w\" sizes=\"auto, (max-width: 704px) 100vw, 704px\" \/><figcaption id=\"caption-attachment-903\" class=\"wp-caption-text\">Hypothetical Route Through 10 Nodes<\/figcaption><\/figure>\n<p>Thus, a participant is not only a sender and receiver, it can serve as a &#8220;transport&#8221; or broker that passes someone else&#8217;s message onto another unit, which may also be a transport node, or the final destination.<\/p>\n<figure id=\"attachment_900\" aria-describedby=\"caption-attachment-900\" style=\"width: 800px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-900\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles.webp\" alt=\"colored diagram of three blocks with round gradients indicating loss of signal strength as the distance increases.\" width=\"800\" height=\"400\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles.webp 800w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles-300x150.webp 300w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles-768x384.webp 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-900\" class=\"wp-caption-text\">3 Transmitters, circles represent the outer limit of transmission capability, i.e. a 1.2 mile radius<\/figcaption><\/figure>\n<p>In the illustration above, all three transmitters can reach about 1.2 miles before the signal is too weak to be useful or received.\u00a0 A is green and the green circle represents the perimeter of its transmission capability. Therefore,<\/p>\n<ul>\n<li>A (green) can reach B which is 1 mile away<\/li>\n<li>C (gold)can reach B which is 1 mile away<\/li>\n<li>B (blue) can reach A and C which are 1 mile away in opposite directions<\/li>\n<li>A cannot reach C, and C cannot reach A because they are out or range for each other.<\/li>\n<\/ul>\n<h3>1 Intermediary (single hop)<\/h3>\n<p>Suppose A &amp; B can reach each other, and B &amp; C can reach each other.\u00a0 But A &amp; C cannot reach each other.\u00a0 That could be the case if radio transmissions where 1.2 miles and A, B &amp; C are 2 miles apart from each other in a straight line.\u00a0 Given the nature of radio transmission, if I wanted to isolate A &amp; C, I would need to place the units 2 or more miles away from each other.\u00a0 That requirement of distance being between two transceivers makes testing very problematic.\u00a0 I do not have 6 other people at my disposal to go out onto the streets and disperse whenever I want to perform a test.<\/p>\n<p>So for lab testing, I can simulate a long distance, and thus inability to receive radio transmissions, using software and simply specify that A is prohibited from reading transmissions from C and C is prohibited from reading transmissions from A, even though they might be inches apart on my desktop.\u00a0 This artificial &#8220;block&#8221; that I program in for each unit simulates being out in the field and unable to reach each other.\u00a0 Using this software block technique, I can simulate a real time network with gaps between certain units as if they were too far apart and out of range.<\/p>\n<p>Then, the next task is: define which pairs of of units should have software blocks.\u00a0 For a 3 unit test, that&#8217;s easy, just block A-&gt;C and C-&gt;A.\u00a0 But when we expand the field of testing to include more units, the task of defining what I call &#8220;blocking pairs&#8221; becomes more challenging.<\/p>\n<p>I posed this issue to ChatGPT and it provided me with a Perl Script, <a href=\"http:\/\/exercises\/205_sustained_link\/scripts\/line_topology_block.pl\">line_topology_blocks.pl<\/a>, where I can provide the names of my units and it will provide the blocking pair directives <span id='easy-footnote-11-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-11-874' title='I use &amp;#8220;directive&amp;#8221; to mean a compile time flag telling the compiler to do something special, e.g. create a software block between two units. An example of such a flag is to cause BOB and CY not to see each other&amp;#8217;s packets is: &amp;#8220;-D SIM_PHY_BLOCK_BOB_CY=1&amp;#8221;.\u00a0 When the compiler is presented with such a directive, it will enact a block of both of the corresponding unit on each named unit, so BOB will block DAN&amp;#8217;s transmissions and DAN will block BOB&amp;#8217;s transmissions.'><sup>11<\/sup><\/a><\/span><\/p>\n<p>&nbsp;<\/p>\n<p>Hence, to simulate that type of topography, here is a diagram:<\/p>\n<figure id=\"attachment_921\" aria-describedby=\"caption-attachment-921\" style=\"width: 473px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-921\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles.md-1-1.png\" alt=\"3 blocks showing AMY-BOB and BOB-CY being 1 miles apart, and AMY-CY being 2 miles apart with red arrowheads\" width=\"473\" height=\"129\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles.md-1-1.png 473w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_in_2_miles.md-1-1-300x82.png 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><figcaption id=\"caption-attachment-921\" class=\"wp-caption-text\">AMY-BOB-CY<\/figcaption><\/figure>\n<p>Here is a Mermaid diagram:<\/p>\n<figure id=\"attachment_922\" aria-describedby=\"caption-attachment-922\" style=\"width: 444px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-922\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/1_hop.md-1.png\" alt=\"3 blocks with AMY-CY blocked\" width=\"444\" height=\"129\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/1_hop.md-1.png 444w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/1_hop.md-1-300x87.png 300w\" sizes=\"auto, (max-width: 444px) 100vw, 444px\" \/><figcaption id=\"caption-attachment-922\" class=\"wp-caption-text\">1 Hop: AMY-BOB-CY<\/figcaption><\/figure>\n<p>And here is the blocking rule:<\/p>\n<pre># Blocking rules \r\n# -------------- \r\nALLOW AMY &lt;-&gt; BOB \r\nALLOW BOB &lt;-&gt; CY \r\nBLOCK AMY &lt;-&gt; CY\r\n\r\n<\/pre>\n<h3>3 Intermediaries (hops)<\/h3>\n<p>Suppose AMY &amp; BOB can reach each other, BOB &amp; CY can reach each other, CY &amp; DAN can reach each other and DAN &amp; ED can reach each other.\u00a0 But AMY &amp; ED cannot reach each other.\u00a0 In order to have the packet move through BOB-&gt;CY-&gt;DAN-&gt;ED, we have to create blocks so the packet doesn&#8217;t take a shorter route, e.g. CY-&gt;ED and bypass DAN.<\/p>\n<p>5 units, 3 hopsHere are the blocking rules for a 3 hop, 5 unit test:<\/p>\n<pre># Blocking rules \r\n# -------------- \r\nALLOW AMY &lt;-&gt; BOB \r\nALLOW BOB &lt;-&gt; CY \r\nALLOW CY &lt;-&gt; DAN \r\nALLOW DAN &lt;-&gt; ED \r\nBLOCK AMY &lt;-&gt; CY \r\nBLOCK AMY &lt;-&gt; DAN \r\nBLOCK AMY &lt;-&gt; ED \r\nBLOCK BOB &lt;-&gt; DAN \r\nBLOCK BOB &lt;-&gt; ED \r\nBLOCK CY &lt;-&gt; ED<\/pre>\n<figure id=\"attachment_913\" aria-describedby=\"caption-attachment-913\" style=\"width: 784px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-913\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_hops.md-1.png\" alt=\"diagram of 5 nodes\" width=\"784\" height=\"275\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_hops.md-1.png 784w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_hops.md-1-300x105.png 300w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/3_hops.md-1-768x269.png 768w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><figcaption id=\"caption-attachment-913\" class=\"wp-caption-text\">5 units, 3 hops<\/figcaption><\/figure>\n<pre><\/pre>\n<h3>5 Intermediaries (hops)<\/h3>\n<p>With 7 T-Beam, aka &#8220;nodes&#8221;, all within their respective transmissions ranges presents a network such as this.\u00a0 There would be no need for any node to serve as a transport node since all units have direct access.<\/p>\n<figure id=\"attachment_910\" aria-describedby=\"caption-attachment-910\" style=\"width: 565px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-910\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_2.webp\" alt=\"7 phone poles in a circle all having wires to the other six\" width=\"565\" height=\"617\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_2.webp 565w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_2-275x300.webp 275w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><figcaption id=\"caption-attachment-910\" class=\"wp-caption-text\">7 Telephones, all with direct lines to one another<\/figcaption><\/figure>\n<p><strong>Goal<\/strong>: is to isolate AMY from GUY.\u00a0 So this is the topology I want simulated: AMY&#8217;s packets must go through the other 5 nodes to reach GUY.\u00a0 This will force units BOB, CY, DAN, ED &amp; FLO to act as transports.<\/p>\n<figure id=\"attachment_911\" aria-describedby=\"caption-attachment-911\" style=\"width: 598px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-911\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_1.webp\" alt=\"7 telephone poles all in a chain of a single line\" width=\"598\" height=\"598\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_1.webp 1056w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_1-300x300.webp 300w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_1-150x150.webp 150w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/telephone_jlp_1-768x768.webp 768w\" sizes=\"auto, (max-width: 598px) 100vw, 598px\" \/><figcaption id=\"caption-attachment-911\" class=\"wp-caption-text\">7 Telephones on a single line<\/figcaption><\/figure>\n<p>With 7 units, I can force the AMY-GUY communication to route through 5 intermediaries using these blocking rules:<\/p>\n<pre># Blocking rules\r\n# --------------\r\nALLOW AMY &lt;-&gt; BOB\r\nALLOW BOB &lt;-&gt; CY\r\nALLOW CY &lt;-&gt; DAN\r\nALLOW DAN &lt;-&gt; ED\r\nALLOW ED &lt;-&gt; FLO\r\nALLOW FLO &lt;-&gt; GUY\r\nBLOCK AMY &lt;-&gt; CY\r\nBLOCK AMY &lt;-&gt; DAN\r\nBLOCK AMY &lt;-&gt; ED\r\nBLOCK AMY &lt;-&gt; FLO\r\nBLOCK AMY &lt;-&gt; GUY\r\nBLOCK BOB &lt;-&gt; DAN\r\nBLOCK BOB &lt;-&gt; ED\r\nBLOCK BOB &lt;-&gt; FLO\r\nBLOCK BOB &lt;-&gt; GUY\r\nBLOCK CY &lt;-&gt; ED\r\nBLOCK CY &lt;-&gt; FLO\r\nBLOCK CY &lt;-&gt; GUY\r\nBLOCK DAN &lt;-&gt; FLO\r\nBLOCK DAN &lt;-&gt; GUY\r\nBLOCK ED &lt;-&gt; GUY\r\n\r\n<\/pre>\n<p>Here&#8217;s an illustration of the 7 units with paths, in blue, that are allowed, and blockers, in gray, that are implemented.<\/p>\n<figure id=\"attachment_967\" aria-describedby=\"caption-attachment-967\" style=\"width: 784px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-967\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/seven_units-1.png\" alt=\"\" width=\"784\" height=\"386\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/seven_units-1.png 784w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/seven_units-1-300x148.png 300w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/seven_units-1-768x378.png 768w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><figcaption id=\"caption-attachment-967\" class=\"wp-caption-text\">Seven Nodes<\/figcaption><\/figure>\n<h3>Script To Create Blocking Diagram and Compiler Directives<\/h3>\n<p>Here is a session running <a href=\"http:\/\/exercises\/205_sustained_link\/scripts\/line_topology_block.pl\">line_topology_blocks.pl<\/a>.\u00a0 The <a href=\"https:\/\/mermaid.ai\/web\/\">Mermaid<\/a> portion is a technology that lets you build charts using text, in this instance, it is really helpful to quickly illustrate what is connected and what is blocked.\u00a0 Here is a screenshot showing my <a href=\"https:\/\/github.com\/VSCodium\/vscodium\">VSCodium<\/a> <span id='easy-footnote-12-874' class='easy-footnote-margin-adjust'><\/span><span class='easy-footnote'><a href='https:\/\/salemdata.net\/johnpress\/?p=874#easy-footnote-bottom-12-874' title='An opensource alternative to Microsoft&amp;#8217;s Visual Studio Code.'><sup>12<\/sup><\/a><\/span> session, with the <em>Markdown Preview Mermaid Support<\/em> plugin displaying my markdown recipe.<\/p>\n<figure id=\"attachment_918\" aria-describedby=\"caption-attachment-918\" style=\"width: 828px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-918\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_204102_Sat.png\" alt=\"VSCodium desktop with markdown file and preview image\" width=\"828\" height=\"764\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_204102_Sat.png 828w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_204102_Sat-300x277.png 300w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2026\/06\/20260613_204102_Sat-768x709.png 768w\" sizes=\"auto, (max-width: 828px) 100vw, 828px\" \/><figcaption id=\"caption-attachment-918\" class=\"wp-caption-text\">Mermaid Preview in VSCodium<\/figcaption><\/figure>\n<div class=\"reticulum-ansi-console\">\n<pre class=\"ansi2html-content\">Script started on 2026-06-13 01:39:45-07:00 [TERM=\"xterm-256color\" TTY=\"\/dev\/pts\/3\" COLUMNS=\"178\" LINES=\"26\"]\r\n<span class=\"ansi38-15 ansi48-237\">[ rnsenv|script ]<\/span> <span class=\"ansi1 ansi32\">jlpoole@jp<\/span><\/pre>\n<pre class=\"ansi2html-content\">\"ansi1 ansi34\"&gt; \/usr\/local\/src\/microreticulum\/microReticulumTbeam\/exercises\/205_sustained_link\/scripts $ date\r\n\r\nSat Jun 13 01:39:47 PDT 2026\r\n<span class=\"ansi38-15 ansi48-237\">[ rnsenv|script ]<\/span> <span class=\"ansi1 ansi32\">jlpoole@jp<\/span><span class=\"ansi1 ansi34\"> \/usr\/local\/src\/microreticulum\/microReticulumTbeam\/exercises\/205_sustained_link\/scripts $<\/span> date makescript topology_block.\/line_topology_block.pl AMY BOB  CY DAN ED FLO GUY\r\n\r\n# Blocking rules\r\n# --------------\r\nALLOW AMY &lt;-&gt; BOB\r\nALLOW BOB &lt;-&gt; CY\r\nALLOW CY &lt;-&gt; DAN\r\nALLOW DAN &lt;-&gt; ED\r\nALLOW ED &lt;-&gt; FLO\r\nALLOW FLO &lt;-&gt; GUY\r\nBLOCK AMY &lt;-&gt; CY\r\nBLOCK AMY &lt;-&gt; DAN\r\nBLOCK AMY &lt;-&gt; ED\r\nBLOCK AMY &lt;-&gt; FLO\r\nBLOCK AMY &lt;-&gt; GUY\r\nBLOCK BOB &lt;-&gt; DAN\r\nBLOCK BOB &lt;-&gt; ED\r\nBLOCK BOB &lt;-&gt; FLO\r\nBLOCK BOB &lt;-&gt; GUY\r\nBLOCK CY &lt;-&gt; ED\r\nBLOCK CY &lt;-&gt; FLO\r\nBLOCK CY &lt;-&gt; GUY\r\nBLOCK DAN &lt;-&gt; FLO\r\nBLOCK DAN &lt;-&gt; GUY\r\nBLOCK ED &lt;-&gt; GUY\r\n\r\n# platformio.ini block directives\r\n# -------------------------------\r\n; Declare any blocked physical pairs here. The build script converts all\r\n; enabled SIM_PHY_BLOCK_&lt;UNIT&gt;_&lt;UNIT&gt; definitions into a generic matrix.\r\n-D SIM_PHY_BLOCK_AMY_CY=1\r\n-D SIM_PHY_BLOCK_AMY_DAN=1\r\n-D SIM_PHY_BLOCK_AMY_ED=1\r\n-D SIM_PHY_BLOCK_AMY_FLO=1\r\n-D SIM_PHY_BLOCK_AMY_GUY=1\r\n-D SIM_PHY_BLOCK_BOB_DAN=1\r\n-D SIM_PHY_BLOCK_BOB_ED=1\r\n-D SIM_PHY_BLOCK_BOB_FLO=1\r\n-D SIM_PHY_BLOCK_BOB_GUY=1\r\n-D SIM_PHY_BLOCK_CY_ED=1\r\n-D SIM_PHY_BLOCK_CY_FLO=1\r\n-D SIM_PHY_BLOCK_CY_GUY=1\r\n-D SIM_PHY_BLOCK_DAN_FLO=1\r\n-D SIM_PHY_BLOCK_DAN_GUY=1\r\n-D SIM_PHY_BLOCK_ED_GUY=1\r\n\r\n# Mermaid\r\n# -------\r\n```mermaid\r\nflowchart LR\r\n    AMY talk_001@&lt;-- Talk --&gt; BOB\r\n    BOB talk_002@&lt;-- Talk --&gt; CY\r\n    CY talk_003@&lt;-- Talk --&gt; DAN\r\n    DAN talk_004@&lt;-- Talk --&gt; ED\r\n    ED talk_005@&lt;-- Talk --&gt; FLO\r\n    FLO talk_006@&lt;-- Talk --&gt; GUY\r\n    AMY blocked_007@-. Blocked .-CY\r\n    AMY blocked_008@-. Blocked .-DAN\r\n    AMY blocked_009@-. Blocked .-ED\r\n    AMY blocked_010@-. Blocked .-FLO\r\n    AMY blocked_011@-. Blocked .-GUY\r\n    BOB blocked_012@-. Blocked .-DAN\r\n    BOB blocked_013@-. Blocked .-ED\r\n    BOB blocked_014@-. Blocked .-FLO\r\n    BOB blocked_015@-. Blocked .-GUY\r\n    CY blocked_016@-. Blocked .-ED\r\n    CY blocked_017@-. Blocked .-FLO\r\n    CY blocked_018@-. Blocked .-GUY\r\n    DAN blocked_019@-. Blocked .-FLO\r\n    DAN blocked_020@-. Blocked .-GUY\r\n    ED blocked_021@-. Blocked .-GUY\r\n\r\n    classDef talk stroke:blue,stroke-width:2px,color:green;\r\n    classDef blocked stroke:#A9A9A9,stroke-width:2px,color:#A9A9A9,stroke-dasharray:5 5;\r\n    class talk_001,talk_002,talk_003,talk_004,talk_005,talk_006 talk\r\n    class blocked_007,blocked_008,blocked_009,blocked_010,blocked_011,blocked_012,blocked_013,blocked_014,blocked_015,blocked_016,blocked_017,blocked_018,blocked_019,blocked_020,blocked_021 blocked\r\n```\r\n<span class=\"ansi38-15 ansi48-237\">[ rnsenv|script ]<\/span> <span class=\"ansi1 ansi32\">jlpoole@jp<\/span><span class=\"ansi1 ansi34\"> \/usr\/local\/src\/microreticulum\/microReticulumTbeam\/exercises\/205_sustained_link\/scripts $<\/span> exit\r\n\r\nexit\r\n\r\nScript done on 2026-06-13 01:39:55-07:00 [COMMAND_EXIT_CODE=\"0\"]\r\n\r\n<\/pre>\n<\/div>\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>&lt;h1&gt;Introduction&lt;\/h1&gt; &lt;p&gt;This article discusses radio transceivers that employ the &lt;a href=&quot;https:\/\/reticulum.network\/&quot;&gt;Reticulum&lt;\/a&gt; protocol. The Reticulum protocol defines the structure of bytes that are transmitted via radio, Ethernet, Bluetooth, and other forms of communication. Here, I&#8217;m addressing LoRa radio protocol only. Radio transceivers using Reticulum and its LoRa interface listen for and transmit radio signals which carry [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":925,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_gfmr_meta_descriptions":[],"_gfmr_multilingual_taxonomy_terms":[],"footnotes":""},"categories":[134,133,131,130,121],"tags":[],"class_list":["post-874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mermaid","category-mesh-network","category-microreticulum","category-reticulum","category-t-beam"],"_links":{"self":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=874"}],"version-history":[{"count":34,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/874\/revisions"}],"predecessor-version":[{"id":973,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/874\/revisions\/973"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/media\/925"}],"wp:attachment":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}