From ad6da8f1dc66e26dd7fee683022e6566b5ab7de2 Mon Sep 17 00:00:00 2001 From: ab7pa Date: Mon, 5 Aug 2024 08:09:14 -0700 Subject: [PATCH] newUI-64 --- README.md | 14 +++++----- appendix/more_info.rst | 6 ++-- arednGettingStarted/downloading_firmware.rst | 2 +- arednGettingStarted/installing_firmware.rst | 2 +- arednGettingStarted/node_admin.rst | 2 +- arednHow-toGuides/beginner-guide.rst | 4 +-- arednHow-toGuides/dish-aiming.rst | 24 +++++----------- arednHow-toGuides/firmware_tips.rst | 20 ++++++------- arednHow-toGuides/lqm.rst | 28 +++++++++++++------ arednHow-toGuides/supernodes.rst | 10 +++---- arednHow-toGuides/xlinks.rst | 8 +++--- arednServicesGuide/_images/aamm-msg.png | Bin 37767 -> 28448 bytes arednServicesGuide/chat_programs.rst | 4 +-- arednServicesGuide/other_programs.rst | 4 +-- 14 files changed, 65 insertions(+), 63 deletions(-) mode change 100755 => 100644 arednServicesGuide/_images/aamm-msg.png diff --git a/README.md b/README.md index 99a1ac2..9c11f69 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -# AREDN Documentation -This repository is for creating documentation for the AREDN project so it can be made available on ReadTheDocs. +# AREDN® Documentation +This repository is for creating documentation for the AREDN® project so it can be made available on ReadTheDocs. ## Viewing the Docs: -To view the AREDN documentation in a web browser, navigate to [https://arednmesh.readthedocs.io/en/latest/](https://arednmesh.readthedocs.io/en/latest/) or select your choice from the `Docs` dropdown menu on [https://www.arednmesh.org](https://www.arednmesh.org). +To view the AREDN® documentation in a web browser, navigate to [https://arednmesh.readthedocs.io/en/latest/](https://arednmesh.readthedocs.io/en/latest/) or select your choice from the `Docs` dropdown menu on [https://www.arednmesh.org](https://www.arednmesh.org). ## Exporting to PDF: -While viewing the AREDN documentation in your web browser, you will see the contents list in the left panel. At the bottom of the panel is a drawer labeled "ReadTheDocs" showing the version you are viewing. Click the label bar to open it. From the drawer you can export the documentation set as a single PDF or Epub file. This is handy if you want to take a PDF copy of the guidebook with you into the field where you do not have Internet access. +While viewing the AREDN® documentation in your web browser, you will see the contents list in the left panel. At the bottom of the panel is a drawer labeled "ReadTheDocs" showing the version you are viewing. Click the label bar to open it. From the drawer you can export the documentation set as a single PDF or Epub file. This is handy if you want to take a PDF copy of the guidebook with you into the field where you do not have Internet access. ## Contributing: -If you are interested in contributing to the rapidly growing set of AREDN related information, you can easily do so on GitHub. The workflow for contributing documentation is described in detail here: [How to Use GitHub for AREDN](https://github.com/aredn/documentation/blob/master/How%20to%20Use%20GitHub%20for%20AREDN.md). +If you are interested in contributing to the rapidly growing set of AREDN® related information, you can easily do so on GitHub. The workflow for contributing documentation is described in detail here: [How to Use GitHub for AREDN](https://github.com/aredn/documentation/blob/master/How%20to%20Use%20GitHub%20for%20AREDN.md). -AREDN documentation is written using the [reStructuredText](https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html) markup language and your text is saved in "rst" files. Before committing your changes, be sure to test your "rst" files locally using [Sphinx](https://www.sphinx-doc.org/en/master/usage/quickstart.html) to ensure they will render correctly. +AREDN® documentation is written using the [reStructuredText](https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html) markup language and your text is saved in "rst" files. Before committing your changes, be sure to test your "rst" files locally using [Sphinx](https://www.sphinx-doc.org/en/master/usage/quickstart.html) to ensure they will render correctly. -Your local code branch name can be anything that makes sense to you. After you create your Pull Request, the AREDN team will review your request just as it does for code changes. Once your documentation contributions are committed to the AREDN GitHub repository, a webhook automatically updates and builds the latest docs for viewing and exporting on ReadTheDocs.org. All contributions that are included by the AREDN® team in the documentation set will be covered by the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International license held by Amateur Radio Emergency Data Network, Inc. +Your local code branch name can be anything that makes sense to you. After you create your Pull Request, the AREDN® team will review your request just as it does for code changes. Once your documentation contributions are committed to the AREDN® GitHub repository, a webhook automatically updates and builds the latest docs for viewing and exporting on ReadTheDocs.org. All contributions that are included by the AREDN® team in the documentation set will be covered by the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International license held by Amateur Radio Emergency Data Network, Inc. diff --git a/appendix/more_info.rst b/appendix/more_info.rst index fcaf2e1..91cf95c 100644 --- a/appendix/more_info.rst +++ b/appendix/more_info.rst @@ -4,8 +4,8 @@ Additional Information Additional information about the AREDN® project can be found at the links below. -- `AREDN homepage `_ -- `AREDN forums `_ +- `AREDN® homepage `_ +- `AREDN® forums `_ Contributing AREDN® Documentation @@ -21,7 +21,7 @@ If you are interested in contributing to the rapidly growing set of AREDN® docu 6. Go to your local computer and clone your fork of the AREDN® documentation: ``git clone https://github.com/YOUR-GITHUB-ID/documentation`` 7. Navigate on your local computer to the folder where your cloned copy of the repository is located: ``cd documentation`` This directory contains your local copy of the AREDN® documentation, and all of your document editing should be done while you are in this directory or its subdirectories. -The workflow for contributing documentation is described in the file titled `How to Use GitHub for AREDN `_, a copy of which you will have in your new local repository. Refer to that document for additional information about contributing AREDN® documentation. +The workflow for contributing documentation is described in the file titled `How to Use GitHub for AREDN® `_, a copy of which you will have in your new local repository. Refer to that document for additional information about contributing AREDN® documentation. Your local editing branch name can be anything that makes sense to you as you add topics to the documentation. AREDN® documentation is written using the `reStructuredText `_ markup language and your text is saved in "rst" files. Before committing your changes, be sure to test your rst files locally using `Sphinx `_ to ensure they will render correctly. diff --git a/arednGettingStarted/downloading_firmware.rst b/arednGettingStarted/downloading_firmware.rst index f0fc4e5..3c3b64d 100644 --- a/arednGettingStarted/downloading_firmware.rst +++ b/arednGettingStarted/downloading_firmware.rst @@ -12,7 +12,7 @@ Types of Firmware Choosing Firmware to Download ----------------------------- -The first step is to choose the AREDN® firmware image for your specific hardware. You can find the available firmware images for your device by using the `AREDN Firmware Selector (AFS) `_. +The first step is to choose the AREDN® firmware image for your specific hardware. You can find the available firmware images for your device by using the `AREDN® Firmware Selector (AFS) `_. .. image:: _images/afs-1.png :alt: AREDN Firmware Selector diff --git a/arednGettingStarted/installing_firmware.rst b/arednGettingStarted/installing_firmware.rst index d1ce945..d75dfc8 100644 --- a/arednGettingStarted/installing_firmware.rst +++ b/arednGettingStarted/installing_firmware.rst @@ -72,7 +72,7 @@ Download the *Install Checklist* for Ubiquiti 802.11n devices. These devices hav Different TFTP client programs may have different command line options or flags that must be used, so be sure to study the command syntax for your TFTP client software. The example shown below may not include the specific options required by your client program. -Download the appropriate *factory* file for your device by following the instructions in the **Downloading AREDN Firmware** section of this documentation. +Download the appropriate *factory* file for your device by following the instructions in the **Downloading AREDN® Firmware** section of this documentation. 1. Set your computer’s Ethernet network adapter to a static IP address that is a member of the correct subnet for your device. Check the documentation for your specific hardware to determine the correct network number. As in the example below, most Ubiquiti devices have a default IP address of 192.168.1.20, so you can give your computer a static IP on the 192.168.1.x network with a netmask of 255.255.255.0. For example, set your Ethernet adapter to a static IP address of 192.168.1.10. You can choose any number for the fourth octet, as long as it is not the same as the IP address of the node. Of course you must also avoid using 192.168.1.0 and 192.168.1.255, which are reserved addresses that identify the network itself and the broadcast address for that network. Other devices may have different default IP addresses or subnets, so select a static IP for your computer which puts it on the same subnet but does not conflict with the default IP of the device. diff --git a/arednGettingStarted/node_admin.rst b/arednGettingStarted/node_admin.rst index 1e5cece..6a556a4 100644 --- a/arednGettingStarted/node_admin.rst +++ b/arednGettingStarted/node_admin.rst @@ -322,7 +322,7 @@ Message Updates Local Message URL This field allows you to enter the URL for a local message source. If you configure a local message server, then your nodes without Internet access can also receive alert messages pertinent to your local mesh. Enter the URL without a trailing backslash. - A local message server can be configured on a mesh-connected web server which allows nodes to query the URL you entered. There is also a separate package called *AREDN Alert Message Manager* which allows the local message repository to be hosted on the node itself, rather than requiring a separate LAN-conneted web server. You can find out more about this application by reading *AREDN Alert Message Manager* in the **Applications and Services Guide** under the *Other Services* section. + A local message server can be configured on a mesh-connected web server which allows nodes to query the URL you entered. There is also a separate package called *AREDN® Alert Message Manager* which allows the local message repository to be hosted on the node itself, rather than requiring a separate LAN-conneted web server. You can find out more about this application by reading *AREDN® Alert Message Manager* in the **Applications and Services Guide** under the *Other Services* section. Message Groups In addition to local messages addressed by node name, it is possible to subscribe to group messages. Multiple group names can be added to this field as a comma delimited list. Group messages are retrieved from the web server specified in the *Local Message URL* field. The following are example grouping ideas: diff --git a/arednHow-toGuides/beginner-guide.rst b/arednHow-toGuides/beginner-guide.rst index bb97548..75812ce 100644 --- a/arednHow-toGuides/beginner-guide.rst +++ b/arednHow-toGuides/beginner-guide.rst @@ -7,7 +7,7 @@ Beginner's Guide What it’s all about ------------------- -By loading the AREDN® firmware in a outdoor wireless access point, you can join a ham radio network. It’s like the Internet but runs on ham radio frequencies, mostly in the 2.4, 3.4, and 5.8 GHz bands. By joining this network you can find and use all sorts of applications (known as “services”). Anything running on a server, like weather stations, web sites showing site conditions, and email servers can be provided as a service. There are also services that don’t rely on a browser: video streams, chat servers, and VOIP PBXes. The network can also be used to connect Winlink stations, Dstar and DMR repeaters, and Allstar devices. Pretty much any kind of service you can put on the Internet you can put on the AREDN network, subject to the restrictions of the ham radio regulations (FCC “Part 97”). +By loading the AREDN® firmware in a outdoor wireless access point, you can join a ham radio network. It’s like the Internet but runs on ham radio frequencies, mostly in the 2.4, 3.4, and 5.8 GHz bands. By joining this network you can find and use all sorts of applications (known as “services”). Anything running on a server, like weather stations, web sites showing site conditions, and email servers can be provided as a service. There are also services that don’t rely on a browser: video streams, chat servers, and VOIP PBXes. The network can also be used to connect Winlink stations, Dstar and DMR repeaters, and Allstar devices. Pretty much any kind of service you can put on the Internet you can put on the AREDN® network, subject to the restrictions of the ham radio regulations (FCC “Part 97”). RF access to the network ------------------------ @@ -106,7 +106,7 @@ GL-iNet Configuring your node --------------------- -After you have your equipment in hand, you need to install the AREDN® firmware, configure its settings, and put it up in the air. Installation and configuration of the firmware is covered in the **Installing AREDN Firmware** and **Basic Radio Setup** sections of the *Getting Started Guide*. +After you have your equipment in hand, you need to install the AREDN® firmware, configure its settings, and put it up in the air. Installation and configuration of the firmware is covered in the **Installing AREDN® Firmware** and **Basic Radio Setup** sections of the *Getting Started Guide*. Aiming High Gain Antennas ------------------------- diff --git a/arednHow-toGuides/dish-aiming.rst b/arednHow-toGuides/dish-aiming.rst index 2d78760..0481eca 100644 --- a/arednHow-toGuides/dish-aiming.rst +++ b/arednHow-toGuides/dish-aiming.rst @@ -11,23 +11,15 @@ Practice with Nearby Nodes If you can drive to within 1/4 mile of an active node, you should be able to pass signals well. At close range the aiming may not be as critical and you could even place a NanoStation or SXTsq panel on your dashboard. Find a public park, open parking lot, or street parking where you have line of sight to a remote node that uses the same frequency as your portable node. Here are some steps you can follow to practice aiming your node. -* In your vehicle, power up your node and plug in your laptop. Disable the wifi interface so the laptop gets its IP address from the node. Open a web browser and use *localnode.local.mesh:8080* to load your node's home page. You will need to have your user name (root) and password to authenticate to the *Setup* display. +- In your vehicle, power up your node and plug in your laptop. Disable the wifi interface so the laptop gets its IP address from the node. Open a web browser and use ``http://localnode.local.mesh`` to load your node's home page. You will need to have your admin password to authenticate to *admin* mode. -* Enter the SSID, Channel, and Channel Width that matches the remote node you are surveying. Regarding the "Distance to Farthest Neighbor" setting, refer to the node help page or the *Configuration Deep Dive > Mesh Column > Distance Setting* section in the **Getting Started Guide** for information. On short paths the zero-distance (automatic setting) may not work well, so you should adjust the slider to a setting close to the estimated distance between your nodes. If you changed any of these settings, click ``Save Changes`` followed by ``Reboot``. +- On the **Radio** page enter the SSID, channel, and channel width that matches the remote node you are surveying. If you changed any of these settings, click ``Done`` and ``Commit`` your changes. -* Now you can do a ``WiFi Scan`` from your node's home page. Put the scan on ``Auto`` refresh and the screen will refresh the scan every ten seconds. The scan list will show remote nodes along with their signal strength, channel number, and SSID. If you have chosen the correct SSID and channel, you should see a connected status if the signal is -87 or stronger. If the channel or SSID doesn't match, you will see a "foreign network" status. There may be other devices on different channels at a particular location. Pick the strongest one and use that channel. +- Now you can click the *Tools* icon to select **WiFi Signal** from the menu. Choose your remote node by clicking in the field at the right and selecting the desired remote node from the dropdown list. The signal level will be updated on the graph, and you can also enable an audio tone to give you an audible indication of the signal level. Turn your radio slowly or even change the car position to find the position at which the signal level is best. -* Once you have a connection with the remote node, quit the WiFi scan and click the ``Charts`` button. You will see a moving graph for the average of all connected stations. In the dropdown menu, choose the remote node you are connected to. Click the *Sound:* ``On`` button, and the pitch of the tone you hear will get higher with greater Signal-to-Noise Ratio (SNR). You may want to adjust the level of the starting tone as well as the tone volume using the sliders below the sound button. You will see the SNR updated every second above the sound button. +- Once you have the highest SNR at your test location, click ``Done`` to return to the **node status** display. You should see the remote node in the list of *Neighborhood Nodes* in the center column. There will also be values displayed for the link quality. Hover over the row for the remote node and click to show the **Neighborhood Device** display. This will provide a wealth of information about the quality of the link to the remote node being tested. -* To get the highest tone pitch and the best SNR, turn your radio slowly or even change the car position by driving forward or back a few feet. If the tone stays at one frequency and the chart is no longer changing, you may have lost the signal. Quit the chart and start again. - -* Once you have the highest SNR at your test location, quit the chart and click the ``Mesh Status`` button. You should see the remote node in the list of *Current Neighbors* on the right. There will also be percent values for LQ based on the signal your node hears, as well as NLQ based on the signal the remote node hears. Right-click the neighbor node link and open it in a new tab on your browser. In the new tab you can see the remote node's view of your connection. - -* On the remote node's home page, click the ``Chart`` button and follow the same procedure as in the step above. This time choose your own node from the dropdown menu, since that remote node may be connected to other stations too. You can turn on the audio tone if you want to hear the relative strength of your node's signal from the perspective of the remote node. - -* Now you can turn your node's antenna a little at a time in order to get the highest possible SNR that's being received by the remote node. You will probably notice less variation in the chart with small movements making it easier to adjust for strongest SNR. - -* Quit the chart once you have the best signal level. If you hover your mouse over the chart you can also view the individual data points that show the specific transmit and receive signal levels (dBm). Check both your *Mesh Status* page and the neighbor's *Mesh Status* page for the LQ and NLQ values. Try to achieve 100/100 percent on each side. +- If desired you can click the neighbor node name to show the remote node's view of your connection by following the same procedure as above. Aligning Distant Nodes ---------------------- @@ -44,9 +36,7 @@ For example, Mikrotik LHG5 and Ubiquiti RocketDish5 antennas are very narrow, wi While it is helpful to know the antenna pattern for the nodes at both ends, the key is knowing the exact coordinates of the two locations so you can determine their topographical relationship to each other (horizontal and vertical azimuth). There are several computer tools for modeling radio links that were mentioned in the **Network Design Guide** under the *Network Modeling* section. One of the most useful is `VE2DBE's Radio Mobile `_ which provides all of the required details for aiming directional antennas between two locations, including both true and magnetic bearings for both sides of the link. -Another invaluable tool mentioned in the **Applications and Services Guide** under *Other Services* is KG6WXC's MeshMap Network Visualizer. This program automatically discovers live nodes on a mesh network and periodically polls them to display their location, configuration, services, and link information. It also has a ruler tool that displays the distance and true bearing (not magnetic) between any two points you select on the map. - -Studying the types of maps mentioned above may allow you to discover other sites where you could place intermediate nodes that might link two distant locations. Google Earth can help you identify visible landmarks before aiming. Obvious tall objects such as water towers or multi-story buildings can be added as markers. Nearby objects such as church steeples or park features can be useful as visual reference points during the aiming procedure: for example, "I need to aim over the skate park to the left of the church to hit the remote node." Google Earth also provides a ruler tool which shows the bearing between map locations, and you can look at the Profile View to see whether there are features which may block your signal. Another tool mentioned in the **Network Design Guide** under the *Network Modeling* section is `Radio Fresnel `_ which generates a Google Earth KMZ file that identifies ground features which may block the Fresnel Zone along your link path. +Studying various local maps may allow you to discover other sites where you could place intermediate nodes that might link two distant locations. Google Earth can help you identify visible landmarks before aiming. Obvious tall objects such as water towers or multi-story buildings can be added as markers. Nearby objects such as church steeples or park features can be useful as visual reference points during the aiming procedure: for example, "I need to aim over the skate park to the left of the church to hit the remote node." Google Earth also provides a ruler tool which shows the bearing between map locations, and you can look at the Profile View to see whether there are features which may block your signal. Another tool mentioned in the **Network Design Guide** under the *Network Modeling* section is `Radio Fresnel `_ which generates a Google Earth KMZ file that identifies ground features which may block the Fresnel Zone along your link path. .. image:: _images/link-azimuth.png :alt: Antenna Aiming Details @@ -56,4 +46,4 @@ Studying the types of maps mentioned above may allow you to discover other sites The chart above shows typical link details that are provided by `Radio Mobile `_. It is very helpful to know these kinds of details and to have an accurate compass before you begin the antenna aiming process. If you use magnetic bearings you will need to know the declination for your location, and be sure your phone or compass is not influenced by nearby metal objects. -Some antennas are easier to aim than others. Large metal dishes are heavy and may require two people to aim, whereas lighter dishes like the Mikrotik LHG units are easier to manipulate. Often only a slight change in position can make a large difference in SNR and link quality. Be sure to avoid trees and be sure your link's first Fresnel Zone is clear of obstructions in order to achieve the best link quality. See the **Network Design Guide** on *Radio Spectrum Characteristics* for examples of ground clearance at different frequencies to ensure the Fresnel Zone is clear. +Some antennas are easier to aim than others. Large metal dishes are heavy and may require two people to aim, whereas lighter dishes like the Mikrotik LHG units are easy to manipulate. Often only a slight change in position can make a large difference in SNR and link quality. Be sure to avoid trees and be sure your link's first Fresnel Zone is clear of obstructions in order to achieve the best link quality. See the **Network Design Guide** on *Radio Spectrum Characteristics* for examples of ground clearance at different frequencies to ensure the Fresnel Zone is clear. diff --git a/arednHow-toGuides/firmware_tips.rst b/arednHow-toGuides/firmware_tips.rst index d07da64..631d0cf 100644 --- a/arednHow-toGuides/firmware_tips.rst +++ b/arednHow-toGuides/firmware_tips.rst @@ -2,10 +2,10 @@ Tips for Uploading Firmware =========================== -Uploading firmware to an AREDN® node is usually a straightforward process. Follow the procedures documented in the **Downloading AREDN Firmware** section to ensure you have the correct firmware version from the AREDN® website to install on your node. If you experience issues uploading firmware, the following tips may be helpful. +Uploading firmware to an AREDN® node is usually a straightforward process. Follow the procedures documented in the **Downloading AREDN® Firmware** section to ensure you have the correct firmware version from the AREDN® website to install on your node. If you experience issues uploading firmware, the following tips may be helpful. Error message when uploading firmware - If you see an error message displayed when uploading new firmware to your node, verify that you are loading the correct file by referring to the `AREDN Firmware Selector (AFS) `_, then you can safely ignore the warning. The file naming standard recently changed from a non-standard naming convention to the standard naming convention used by OpenWRT. + If you see an error message displayed when uploading new firmware to your node, verify that you are loading the correct file by referring to the `AREDN® Firmware Selector (AFS) `_, then you can safely ignore the warning. The file naming standard recently changed from a non-standard naming convention to the standard naming convention used by OpenWRT. Web browser cache and sessions One common issue can occur when installing firmware using a web browser. Your computer's browser cache stores data for the URLs that have been visited, but IP addresses and other parameters may change during the install process. It is possible for the cache to contain information that doesn’t match the latest settings for the URL, so the browser may block the connection setup and display an ERR_CONNECTION_RESET message. Clearing your computer's web browser cache will allow the latest URL settings to be registered so you can continue with the install process. @@ -28,9 +28,9 @@ PXE Server Tips for Upgrading Firmware --------------------------- -Upgrading an AREDN® node is accomplished using the *Setup > Administration > Firmware Update* feature on the node's web interface. Follow the procedures documented in the **Downloading AREDN Firmware** section to ensure you have the correct firmware version from the AREDN® website to install on your node. +Upgrading an AREDN® node is accomplished on the *Firmware* page. Follow the procedures documented in the **Downloading AREDN® Firmware** section to ensure you have the correct firmware version from the AREDN® website to install on your node. -.. note:: Currently there are a few Mikrotik devices which require that the standard firmware compatibility checks be disabled in order to upgrade from version 3.22.12.0 or older to a newer firmware version. This is a "one time" issue which will migrate these devices from the legacy *ar71xx* firmware architecture to the current *ath79* architecture. The specific devices are shown in the **Supported Devices** list on the AREDN® website (see footnote 1). You must first install the `Dangerous Upgrade package `_ (the **ipk** file) which will disable the firmware compatibility checks. After this package is installed on your node you can perform a normal firmware upgrade (for example) from 3.22.12.0 to 3.24.4.0. +.. note:: Currently there are a few Mikrotik devices which require that the standard firmware compatibility checks be disabled in order to upgrade from version 3.22.12.0 or older to a newer firmware version. This is a "one time" issue which will migrate these devices from the legacy *ar71xx* firmware architecture to the current *ath79* architecture. The specific devices are shown in the **Supported Devices** list on the AREDN® website (see footnote 1). You must first install the `Dangerous Upgrade package `_ (the **ipk** file) which will disable the firmware compatibility checks. After this package is installed on your node you can perform a normal firmware upgrade (for example) from 3.22.12.0 to 3.24.x.x and above. In rare cases the upgrade process can fail due to lack of node resources, but such a failure will leave the node running its previous firmware version. The following tips help ensure that memory utilization is at a minimum on the node. @@ -61,16 +61,16 @@ Tips for legacy nodes with low memory (32mb) To transfer the image from a Windows computer you can use a *Secure Copy* program such as `WinSCP `_. Then use a terminal program such as `PuTTY `_ to connect to the node via ssh or telnet in order to run the sysupgrade command shown as the last line above. - - As a last resort, use the First Install procedure to load the *factory.bin* firmware image to the node. This procedure is described in the *First Install* sections of **Installing AREDN Firmware**. + - As a last resort, use the First Install procedure to load the *factory.bin* firmware image to the node. This procedure is described in the *First Install* sections of **Installing AREDN® Firmware**. Tips for Downgrading Firmware ----------------------------- Downgrading AREDN® firmware is typically accomplished using the same procedure as for uploading firmware to your node. You are simply uploading a previous version of the firmware rather than the latest version. -However, there is a difference if you are downgrading the firmware on a node which previously used a different target architecture. As explained in the **Downloading AREDN Firmware** section, the legacy ``ar71xx`` target has been retired and replaced by the ``ath79`` target. For example, you may have a node that was previously running an ``ar71xx`` firmware version but you installed the latest Stable Release or Nightly Build which upgraded it to an ``ath79`` firmware target. In this case you will need to do a fresh First Install using the legacy architecture's firmware. +However, there is a difference if you are downgrading the firmware on a node which previously used a different target architecture. As explained in the **Downloading AREDN® Firmware** section, the legacy ``ar71xx`` target has been retired and replaced by the ``ath79`` target. For example, you may have a node that was previously running an ``ar71xx`` firmware version but you installed the latest Stable Release or Nightly Build which upgraded it to an ``ath79`` firmware target. In this case you will need to do a fresh First Install using the legacy architecture's firmware. -1. Use the `AREDN Firmware Selector `_ to download the previous release's install files. For example, if your Ubiquiti Rocket M5 XW is currently running version ``3.23.4.0``, then download the files required for a First Install from release ``3.22.12.0`` which used *ar71xx* (as shown below). +1. Use the `AREDN® Firmware Selector `_ to download the previous release's install files. For example, if your Ubiquiti Rocket M5 XW is currently running version ``3.23.4.0``, then download the files required for a First Install from release ``3.22.12.0`` which used *ar71xx* (as shown below). .. image:: _images/downgrade.png :alt: Downgrading across target architectures @@ -78,12 +78,12 @@ However, there is a difference if you are downgrading the firmware on a node whi | -2. Review the **Installing AREDN Firmware** documentation and follow the steps for the *First Install* procedure that is appropriate for your node model. +2. Review the **Installing AREDN® Firmware** documentation and follow the steps for the *First Install* procedure that is appropriate for your node model. - For Ubiquiti and TP-LINK models you will be uploading the *FACTORY* firmware. - For Mikrotik models you will boot using the *KERNEL* file (which you rename to *rb.elf*) and then immediately apply the *SYSUPGRADE* firmware image. - For GL.iNet models you will use the `recovery procedure `_ to upload the *SYSUPGRADE* firmware image. -Another possible way to downgrade firmware between architectures is to enable **Dangerous Upgrade** under the *Advanced Configuration* settings. Setting this to *ON* will disable the normal firmware compatibility checks that are done automatically during the firmware install process. This should allow your node to install a firmware image that uses a legacy architecture. +Another possible way to downgrade firmware between architectures is to enable **Dangerous Upgrade** under the *Advanced Options* on the **Firmware** settings page. Setting this to *ON* will disable the normal firmware compatibility checks that are done automatically during the firmware install process. This should allow your node to install a firmware image that uses a legacy architecture. -After downgrading your node's firmware you will then continue the process for entering your callsign and configuring the node's settings, as explained in the **Basic Setup** section. +After downgrading your node's firmware you will then continue the process for entering your callsign and configuring the node's settings. diff --git a/arednHow-toGuides/lqm.rst b/arednHow-toGuides/lqm.rst index af0b779..c97141a 100644 --- a/arednHow-toGuides/lqm.rst +++ b/arednHow-toGuides/lqm.rst @@ -9,12 +9,12 @@ AREDN® mesh networks often lack the bandwidth you might expect. Here we look at Introduction ------------ -Low SNR links between nodes break the Linux “auto distance” algorithm resulting in poor bandwidth utilization on node links. This document describes *Link Quality Manager* which can be enabled on nodes to better manage RF links. Typically 3x bandwidth improvements have been observed, but much higher improvements are possible. +This document describes *Link Quality Manager* which is enabled on nodes to better manage RF links. Typically 3x bandwidth improvements have been observed, but much higher improvements are possible. Expected link speed vs. actual link speeds ------------------------------------------ -We’ve all pointed an AREDN® node at another node, found the sweet spot for the best SNR, and then been underwhelmed by how much bandwidth there seems to be. WiFi is famous for over-reporting how much bandwidth is available vs. what you actually get (think 1/6th in many cases), but somehow we all expect a 2 mile link with SNR > 20 to do more than 1 Mbps. Unfortunately actual performance data is difficult to come by, and experiments to see what might improve are difficult to coordinate. Several theories are described below. +We’ve all pointed an AREDN® node at another node, found the sweet spot for the best SNR, and then been underwhelmed by how little bandwidth seems to be available. WiFi is famous for over-reporting how much bandwidth is available vs. what you actually get (think 1/6th in many cases), but somehow we all expect a 2 mile link with SNR > 20 to do more than 1 Mbps. Unfortunately actual performance data is difficult to come by, and experiments to see what might improve are difficult to coordinate. Several theories are described below. Performance theories -------------------- @@ -38,7 +38,7 @@ Checking the status of various omnidirectional antennas on the SF Bay Area netwo CSMA vs. TDMA ^^^^^^^^^^^^^ -TDMA is more efficient than CSMA and avoids many of its problems. However, Linux currently has no implementation of the protocol; it is restricted to proprietary radios. This means that AREDN® as currently envisaged cannot support TDMA. While TDMA radios can have a place in an AREDN® network, they seem better suited for backbone operation. +TDMA is more efficient than CSMA and avoids many of its problems. However, Linux currently has no implementation of the protocol; it is restricted to proprietary radios. This means that AREDN® as currently envisaged cannot support TDMA. While TDMA radios may have a place in an AREDN® network, they seem better suited for backbone operation. That said, racing to embrace TDMA without understanding why the current CSMA network is failing is problematic. If hidden nodes aren’t the issue, and network utilization is too low for bandwidth decimation, how would TDMA fix this? What actually is the problem? @@ -53,14 +53,14 @@ The WiFi standard (IEEE Std 802.11TM-2007, Part 11) briefly discusses “Coverag Auto-distance ^^^^^^^^^^^^^ -AREDN® provides a “Distance to FARTHEST Neighbor” setting which, indirectly, allows the Coverage Class to be set (the Linux kernel calculates the coverage class from the distance setting). An “auto” option is provided and enabled by default. “Auto” uses a “dynamic ack” algorithm in the kernel which automatically adjusts the Coverage Class. The adjustment is based on the timing of packets sent to and acknowledged from other devices. The class will always be large enough to handle the most distant device. +Legacy AREDN® firmware versions provided a “Distance to FARTHEST Neighbor” setting which, indirectly, allowed the Coverage Class to be set (the Linux kernel calculates the coverage class from the distance setting). An “auto” option was provided and enabled by default. “Auto” uses a “dynamic ack” algorithm in the kernel which automatically adjusts the Coverage Class. The adjustment is based on the timing of packets sent to and acknowledged from other devices. The class will always be large enough to handle the most distant device. -AREDN® is an open, ad hoc, network allowing any node to associate with any other node as long as it uses the same channel and bandwidth. This results in distant nodes with very low SNRs being associated with each other. Unfortunately the dynamic-ack algorithm does not know that these links are essentially unusable, but it still adjusts the Coverage Class to accommodate them. The result is a higher Coverage Class than is required for optimal network operation, resulting in longer delays in packet retransmission. This compounds the already increased retransmissions inherent in longer links and further reduces the throughput. +AREDN® is an open *ad hoc* network allowing any node to associate with any other node as long as it uses the same channel and bandwidth. This results in distant nodes with very low SNRs being associated with each other. Unfortunately the dynamic-ack algorithm does not know that these links are essentially unusable, but it still adjusts the Coverage Class to accommodate them. The result is a higher Coverage Class than is required for optimal network operation, resulting in longer delays in packet retransmission. This compounds the already increased retransmissions inherent in longer links and further reduces the throughput. Link Quality Manager (LQM) -------------------------- -The *Link Quality Manager* can be enabled on any node running 3.22.12.0 or newer firmware. It runs in the background to evaluate RF links and automatically take the following actions:
 +*Link Quality Manager* is enabled on any node running firmware 3.22.12.0 or newer. It runs in the background to evaluate links and automatically takes the following actions:
 1. Blocks radio links which are also DtD links 2. Blocks radio links which have too low an SNR @@ -74,11 +74,17 @@ What does this mean? ^^^^^^^^^^^^^^^^^^^^ 1. Occasionally nodes are directly connected (DtD) to collocated nodes which are also using the same channel. Although the DtD link should be preferred by OLSRD, LQM ensures that any radio link between DtD nodes is always ignored. + 2. LQM ignores links with SNR too low to be useful. The application uses adjustable settings to accomplish this: drop below the minimum SNR and the link is blocked until the SNR is above the activate level. The hysteresis avoids links bouncing in and out of a blocked state. This stops OLSR from using poor links. + 3. LQM limits how far a node can be from a neighbor and still have a reliable link, even if there is a high SNR. The more distant a node, the lower the throughput of the link. In addition, the total throughput on a node is affected by the most distant node it communicates with. LQM automatically determines the distance between nodes using the latitude and longitude information available from each node’s sysinfo.json api. + 4. Some links can have high SNR, not be far away, but still have terrible performance due to excessive retransmission errors. While some retransmissions are to be expected, if this rate becomes large then performance suffers. LQM blocks links with poor link quality. + 5. LQM disables automatic distance detection and takes over the job of managing the Coverage Class. LQM evaluates the non-blocked links and determines whether there is at least one route which uses this link. It then selects the link with the largest distance and uses this to calculate the Coverage Class. +The *Link Quality Manager* refreshes its state every minute and adjusts the blocked nodes and Coverage Class calculations. The *node status* display shows statistics for each link. LQM settings can be adjusted on the **Radios & Antennas** display. + What LQM does not do ^^^^^^^^^^^^^^^^^^^^ @@ -115,12 +121,18 @@ Link Distance (miles) SNR No LQM (Mbps) With LQM (Mbps) Notes 34 0.7/0.6 0.7/0.7 ===================== ===== ============= =============== ============= -These results yield the following conclusions. LQM never negatively affects bandwidth, but the positive effect can be very large. The only result where there was no measurable improvement was at a site having a mixture of many long and short distance links. As expected, the very long 34 mile link negatively impacted all other links on that radio. Improvements of 47x was observed in one case (which was verified multiple times) and it occurred in a crowded, noisy environment. More typical improvements were around 3x. +These results yield the following conclusions: + +- LQM never negatively affects bandwidth, but the positive effect can be very large. + +- The only result where there was no measurable improvement was at a site having a mixture of many long and short distance links. As expected, the very long 34 mile link negatively impacted all other links on that radio. + +- Improvements of 47x were observed in one case (which was verified multiple times) and it occurred in a crowded, noisy environment. More typical improvements were around 3x. Conclusions ----------- -Experiments with the *Link Quality Manager* have demonstrated that we can improve the throughput on links by a significant amount without making physical changes to the network. Improvements of 3x bandwidth are common and in many cases much more is observed. +Experiments with *Link Quality Manager* have demonstrated that we can improve the throughput on links by a significant amount without making physical changes to the network. Improvements of 3x bandwidth are common and in many cases much more is observed. LQM also blocks paths in the network which are marginal, either due to excessive distance, poor SNR, or high retransmissions. We expect that by blocking poorly performing links the entire network will be more stable and performant. diff --git a/arednHow-toGuides/supernodes.rst b/arednHow-toGuides/supernodes.rst index 39dc675..5814f70 100644 --- a/arednHow-toGuides/supernodes.rst +++ b/arednHow-toGuides/supernodes.rst @@ -43,7 +43,7 @@ As more Supernodes are deployed linking more local networks, the overall perform Setting up a Supernode ---------------------- -Typically a Supernode is configured on a dedicated *Mikrotik hAP ac2*. Its sole task is to serve as a node on the Supernode network. The local network is linked to the Supernode using a :abbr:`DtD (Device to Device)` link on one of its LAN ports which is configured for *dtdlink* on the *Advanced Network* display (Port 5 by default). +Typically a Supernode is configured on a dedicated *Mikrotik hAP ac2*. Its sole task is to serve as a node on the Supernode network. The local network is linked to the Supernode using a :abbr:`DtD (Device to Device)` link on one of its LAN ports which is configured for *dtdlink* on the *Ethernet Ports & Xlinks* display (Port 5 by default). .. image:: _images/supernode-localDTD.png :alt: DtD Link Example @@ -57,11 +57,11 @@ The following steps are required to configure a Supernode. #. Configure the Supernode with a nodename prefixed with your callsign followed by a location identifier as well as the word "SUPERNODE." For example you could use ``AB2CD-NYC-SUPERNODE`` or ``AB6CD-LAX-SUPERNODE`` -#. Ensure that *Mesh RF* is ``disabled`` +#. Ensure that the *Mesh* radio is ``off`` #. Provide a reserved or static IP address for the device's WAN connection to your Internet routing device. -#. Do not add any other configuration settings at this point or you may encounter problems later in this process. At this point simply *Save Changes* and *Reboot* the device. +#. Do not add any other configuration settings at this point or you may encounter problems later in this process. At this point you can ``Commit`` your changes and *reboot* the device. #. Login to the rebooted device via *ssh* or *telnet* to get a command line prompt, and then manually type and execute each of these commands: @@ -93,9 +93,9 @@ If you do not see these lines, please start this process again from the beginnin Things to Avoid Here are several things **NOT** to do when configuring your Supernode. - - Your Supernode must **not** use any Cross-links (Xlinks) to other nodes. + - Your Supernode must **not** use any cross-links (xlinks) to other nodes. - Your Supernode must **not** have tunnel links to any non-Supernode devices. - - Your Supernode must **not** have its *Mesh RF* interface ``enabled`.` *Mesh RF* must be ``disabled`` as noted above. + - Your Supernode must **not** have its *Mesh* radio interface enabled. Before proceeding, make sure all the previous steps have been completed successfully. Now you should be able to connect to another Supernode using a tunnel. The easiest way to do this is to ask another Supernode owner for a set of tunnel client credentials. Your node can use either a client or server tunnel link. Supernode owners can be identified from the `Supernode Network Map `_ diff --git a/arednHow-toGuides/xlinks.rst b/arednHow-toGuides/xlinks.rst index bcc4113..3822d3f 100644 --- a/arednHow-toGuides/xlinks.rst +++ b/arednHow-toGuides/xlinks.rst @@ -18,19 +18,19 @@ Tunnels and cross-links both connect two nodes together, so they are the same in Configure the AREDN® nodes at both ends ---------------------------------------------- -You can use either a *Mikrotik hAP ac2* or *ac3* as the AREDN® device on each end of the cross-link. Navigate to the **Administration > Advanced Network** page of the node on one side of the link. To add a cross-link click the *plus* icon, enter an unused VLAN number for the link, an IP address for the near-side radio, an IP address for the far-side radio, a weighting factor, and the available port to which the near-side radio is connected on your node. The *Weight* will be used by `OLSR `_ to determine the best route for AREDN® traffic. +You can use either a *Mikrotik hAP ac2* or *ac3* as the AREDN® device on each end of the xlink. Navigate to the **Ethernet Ports & Xlinks** page of the node on one side of the link. To add an xlink click the *plus* icon, enter an unused VLAN number for the link, an IP address for the near-side radio, an IP address for the far-side radio, a weighting factor, and the available port to which the near-side radio is connected on your node. The *Weight* will be used by `OLSR `_ to determine the best route for AREDN® traffic. .. image:: ../arednGettingStarted/_images/admin-ports-xlinks.png - :alt: Advanced Networking + :alt: Ethernet Ports & Xlinks :align: center -In this example we chose VLAN ``20`` because it is not in use anywhere else on our network. We assigned an *IP Address* of ``172.16.1.1`` for the this node, and we assigned ``172.16.1.2`` as the *Peer Address* for the node on the other side of the link. The xlink knows nothing about the details or configuration of the PtP radios, or their IP addresses. The *Weight* is set to ``1`` which is the same weight as would be used by a tunnel connection, but this can be increased if you want the cross-link to be chosen at a lower priority for routing traffic on the mesh. *Port* ``3`` was chosen because it is an open port on this device. After entering your values, click *Save Changes* to save the new cross-link information. Now you can cable your near-side PtP device to port 3 on your AREDN® node. +In this example we chose VLAN ``20`` because it is not in use anywhere else on our network. We assigned an *IP Address* of ``172.16.1.1`` for the this node, and we assigned ``172.16.1.2`` as the *Peer Address* for the node on the other side of the link. The xlink knows nothing about the details or configuration of the PtP radios, or their IP addresses. The *Weight* is set to ``1`` which is the same weight as would be used by a tunnel connection, but this can be increased if you want the cross-link to be chosen at a lower priority for routing traffic on the mesh. *Port* ``3`` was chosen because it is an open port on this device. After entering your values, click ``Done`` and ``Commit`` your changes. Now you can cable your near-side PtP device to port 3 on your AREDN® node. .. image:: _images/xlink.png :alt: Cross-link diagram :align: center -Next, open the **Administration > Advanced Network** page on the node for the other side of the PtP link. Set the *IP Address* for this node to ``172.16.1.2`` and the *Peer Address* for the node on the other side of the link to ``172.16.1.1``. The *Weight* is set to ``1`` which is the same weight as would be used by a tunnel connection, but this can be increased if you want the cross-link to be chosen at a lower priority for routing traffic on the mesh. In our example we are setting the *Port* to ``4`` because it is an open port on this device. After entering your values, click *Save Changes* to save the cross-link configuration for this side of the PtP link. Now you can cable your far-side PtP device to port 4 on your AREDN® node. +Next, open the **Ethernet Ports * Xlinks** page on the node for the other side of the PtP link. Set the *IP Address* for this node to ``172.16.1.2`` and the *Peer Address* for the node on the other side of the link to ``172.16.1.1``. The *Weight* is set to ``1`` which is the same weight as would be used by a tunnel connection, but this can be increased if you want the cross-link to be chosen at a lower priority for routing traffic on the mesh. In our example we are setting the *Port* to ``4`` because it is an open port on this device. After entering your values, click ``Done`` and ``Commit`` your changes for this side of the PtP link. Now you can cable your far-side PtP device to port 4 on your AREDN® node. Configure the intermediate Point-to-Point link ---------------------------------------------- diff --git a/arednServicesGuide/_images/aamm-msg.png b/arednServicesGuide/_images/aamm-msg.png old mode 100755 new mode 100644 index fb8292c0ad8968ee81d0151843018f2d679f17cb..04ab2666dd9d0141290afdc60e96babcc35b2e93 GIT binary patch literal 28448 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 -- `Older Lua version of Meshchat for AREDN ≥3.22.6.0 (no longer maintained) `_ +- `Older Lua version of Meshchat (no longer maintained) `_ -- Original Perl version of Meshchat for AREDN ≤3.22.1.0 or for running Meshchat on a Raspbian or Debian computer (no longer maintained) +- Original Perl version for running Meshchat on a Raspbian or Debian computer (no longer maintained) .. image:: _images/meshchat.png :alt: MeshChat Web Interface diff --git a/arednServicesGuide/other_programs.rst b/arednServicesGuide/other_programs.rst index 442e17b..3e6aa19 100644 --- a/arednServicesGuide/other_programs.rst +++ b/arednServicesGuide/other_programs.rst @@ -30,7 +30,7 @@ You may choose to purchase an inexpensive off-the-shelf NTP appliance such as th AREDN® Alert Message Manager ----------------------------------- -AREDN® Alert Messages were explained in the **Getting Started Guide** under the *Node Status* and *Advanced Configuration* sections. The example given there showed the Alert Message source running on a separate LAN-connected web server. It is also possible to provide Alert Messages using an application created by Gerard Hickey (WT0F) which runs directly on a node having adequate storage. The AREDN® Alert Message Manager *(aamm)* uses the node's web server to provide a web interface for creating, updating, or deleting Alert Messages -- as well as actually hosting the message repository on the node itself, so that no external LAN-connected web server is required. +AREDN® Alert Message Manager is an application created by Gerard Hickey (WT0F) which runs directly on a node having adequate storage. The *(aamm)* package uses the node's web server to provide a web interface for creating, updating, or deleting Alert Messages -- as well as actually hosting the message repository on the node itself, so that no external LAN-connected web server is required. .. image:: _images/aamm-display.png :alt: AAMM Display @@ -46,7 +46,7 @@ The two advantages of using this application are 1) having the message managemen | -The recipient nodes are configured the same way as described in the **Getting Started Guide** under the *Advanced Configuration* section for AREDN® Alert Messages. For additional information about the AREDN® Alert Message Manager, visit this link: `aamm `_. You may also download and install the latest *aamm* package files `here `_. +The recipient nodes are configured as described in the *Internal Services* section of the **Node Admin Guide**. For additional information about AREDN® Alert Message Manager, visit this link: `aamm `_. You may also download and install the latest *aamm* package files `here `_. weeWx Weather Service ---------------------