Add Jekyll

This commit is contained in:
Jeremy McGee 2025-09-11 14:57:09 -06:00
parent ef38f076c6
commit 63eb6d376a
37 changed files with 644 additions and 166 deletions

View File

@ -18,7 +18,7 @@ A number of optional components are listed in the parts list below. Currently, I
* Raspberry Pi 3B+ and 2W support
## Advantages to using this over the Seeed image
* The BCF file is different, so the power goes from 21 dBm to 27 dBm
* The BCF file is different from the one provided by Seeed, so the power goes from 21 dBm to 27 dBm
* The build is newer than the Seeed image
* The build includes 802.11s support
* 📄 [Range Testing Results](./Range%20Testing/README.md)

5
docs/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
_site
.sass-cache
.jekyll-cache
.jekyll-metadata
vendor

25
docs/404.html Normal file
View File

@ -0,0 +1,25 @@
---
permalink: /404.html
layout: page
---
<style type="text/css" media="screen">
.container {
margin: 10px auto;
max-width: 600px;
text-align: center;
}
h1 {
margin: 30px 0;
font-size: 4em;
line-height: 1;
letter-spacing: -1px;
}
</style>
<div class="container">
<h1>404</h1>
<p><strong>Page not found :(</strong></p>
<p>The requested page could not be found.</p>
</div>

33
docs/Gemfile Normal file
View File

@ -0,0 +1,33 @@
source "https://rubygems.org"
# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
# bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
gem "jekyll", "~> 4.4.1"
# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "just-the-docs"
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins
# If you have any plugins, put them here!
group :jekyll_plugins do
gem "jekyll-feed", "~> 0.12"
end
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library.
platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", ">= 1", "< 3"
gem "tzinfo-data"
end
# Performance-booster for watching directories on Windows
gem "wdm", "~> 0.1", :platforms => [:mingw, :x64_mingw, :mswin]
# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem
# do not have a Java counterpart.
gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby]

102
docs/Gemfile.lock Normal file
View File

@ -0,0 +1,102 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
base64 (0.3.0)
bigdecimal (3.2.3)
colorator (1.1.0)
concurrent-ruby (1.3.5)
csv (3.3.5)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
ffi (1.17.2-x64-mingw-ucrt)
forwardable-extended (2.6.0)
google-protobuf (4.32.0-x64-mingw-ucrt)
bigdecimal
rake (>= 13)
http_parser.rb (0.8.0)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
jekyll (4.4.1)
addressable (~> 2.4)
base64 (~> 0.2)
colorator (~> 1.0)
csv (~> 3.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
json (~> 2.6)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (~> 0.3, >= 0.3.6)
pathutil (~> 0.9)
rouge (>= 3.0, < 5.0)
safe_yaml (~> 1.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-include-cache (0.2.1)
jekyll (>= 3.7, < 5.0)
jekyll-sass-converter (3.1.0)
sass-embedded (~> 1.75)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
json (2.13.2)
just-the-docs (0.10.1)
jekyll (>= 3.8.5)
jekyll-include-cache
jekyll-seo-tag (>= 2.0)
rake (>= 12.3.1)
kramdown (2.5.1)
rexml (>= 3.3.9)
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.4)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (6.0.2)
rake (13.3.0)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rexml (3.4.4)
rouge (4.6.0)
safe_yaml (1.0.5)
sass-embedded (1.92.1-x64-mingw-ucrt)
google-protobuf (~> 4.31)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2025.2)
tzinfo (>= 1.0.0)
unicode-display_width (2.6.0)
wdm (0.2.0)
webrick (1.9.1)
PLATFORMS
x64-mingw-ucrt
DEPENDENCIES
http_parser.rb (~> 0.6.0)
jekyll (~> 4.4.1)
jekyll-feed (~> 0.12)
just-the-docs
tzinfo (>= 1, < 3)
tzinfo-data
wdm (~> 0.1)
BUNDLED WITH
2.7.2

33
docs/_config.yml Normal file
View File

@ -0,0 +1,33 @@
# Welcome to Jekyll!
#
# This config file sets site-wide values (title, email, description, etc.).
# Restart `bundle exec jekyll serve` after changing this file.
# Site settings
title: OpenMANET
email: info@openmanet.net
description: >-
OpenMANET is a Raspberry Pibased MANET radio built on Wi-Fi HaLow (802.11ah).
Designed around Morse Micro HATs/SDIO boards and OpenWrt, it supports 802.11s
+ batman-adv, GPSD-driven range tests, and a PTT app—aiming for a rugged,
field-ready kit. A custom BCF enables ~27 dBm TX power vs Seeed defaults.
# If you publish under a custom domain or project pages, set these:
# For a custom domain: url: "https://openmanet.net" and baseurl: ""
# For GitHub project pages: url: "https://<user>.github.io" and baseurl: "/<repo>"
baseurl: "" # the subpath of your site, e.g. /docs; keep "" if deploying at root of the Pages site
url: "" # the base hostname & protocol for your site
twitter_username: ""
github_username: "OpenMANET"
# Build settings
theme: just-the-docs
plugins:
- jekyll-feed
# Just the Docs options (optional; tweak as needed)
just_the_docs:
search_enabled: true
heading_anchors: true
color_scheme: dark

View File

@ -0,0 +1,29 @@
---
layout: post
title: "Welcome to Jekyll!"
date: 2025-09-11 14:13:46 -0600
categories: jekyll update
---
Youll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.
Jekyll requires blog post files to be named according to the following format:
`YEAR-MONTH-DAY-title.MARKUP`
Where `YEAR` is a four-digit number, `MONTH` and `DAY` are both two-digit numbers, and `MARKUP` is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.
Jekyll also offers powerful support for code snippets:
{% highlight ruby %}
def print_hi(name)
puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %}
Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekylls GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].
[jekyll-docs]: https://jekyllrb.com/docs/home
[jekyll-gh]: https://github.com/jekyll/jekyll
[jekyll-talk]: https://talk.jekyllrb.com/

View File

@ -1,154 +0,0 @@
# Setup batman-adv
B.A.T.M.A.N. advanced (often referenced as batman-adv) is an implementation of the B.A.T.M.A.N. routing protocol in form of a linux kernel module operating on layer 2.
B.A.T.M.A.N. is a proactive routing protocol for Wireless Ad-hoc Mesh Networks, including (but not limited to) Mobile Ad-hoc Networks (MANETs). The protocol proactively maintains information about the existence of all nodes in the mesh that are accessible via single-hop or multi-hop communication links. The strategy of B.A.T.M.A.N. is to determine for each destination in the mesh one single-hop neighbor, which can be utilized as best gateway to communicate with the destination node. In order to perform multi-hop IP-based routing, the routing table of a node must contain a link-local gateway for each host or network route. To learn about the best next-hop for each destination is all that the B.A.T.M.A.N. algorithm cares about. There is no need to find out or calculate the complete route, which makes a very fast and efficient implementation possible.
**Important: Follow the 802.11s Wizard through the WebUI BEFORE setting up batman-adv**
## Setup Server Gateway
The "Server" Gateway node type is used to uplink internet access or connect another non mesh network to your 802.11s mesh. You will want to follow the 802.11s Mesh Wizard using the `Mesh Gate` mode.
Navigate to the LuCI web interface in your web browser, typically at http://10.42.0.1
From the sidebar menu goto **Network > Interfaces**
![Add Bat0 Device](img/Add-bat0-device.png)
Click on **Add New Interface** Button
![Add Bat0 Device Interface](img/bat0-interface.png)
From the drop-down menu `Protocol` select `Batman Device`. Give the device a name like **bat0**. Then click Create interface. This will create a tunnel device called `bat0`. OSI Layer 2 packets/frames sent over the the tunnel will be routed using the batman protocol. Next, we will be prompted to configure some batman-specific options. You can edit these options again later by clicking the Edit button next to the bat0 interface.
![Configure Bat0 Device](img/bat0-device-config.png)
You can accept most of the default options. Navigate to the `Mesh Routing` tab to make a few recommended changes.
![Mesh Routing Options](img/bat0-mesh-routing-server.png)
First, select the Routing Algorithm you want. You want to use BATMAN_V. All mesh nodes must be configured to use the same version of the batman protocol. Next, check the box to Avoid Bridge Loops. Set Gateway Mode to `Server` to explicitly tell batman that this router will be a gateway to the Internet. (Later, when configuring client nodes, we will set Gateway Mode to Client.)
Save your changes. You are finished setting up the bat0 device. Next we will create an alias interface for associating a radio with the batman mesh. Click Add new interface... again.
![Create Batman Interface](img/batman-interface-creation.png)
Select Batman Interface from the dropdown menu. Give the interface a name like batmesh. Important: do not associate the interface with a device in this menu. You will associate the interface with the bat0 batman device in the next step. For now, leave Device as unspecified and click Create Interface.
![Batman Interface Detail](img/batman-inferface-create-detail.png)
After you create the `batmesh_radio0` interface you will be prompted to configure its settings. Here you can set the Batman Device to bat0. You should not need to change any of the other default options.
`Save & Apply` your interface changes.
![Save & Apply](img/batman-save-interfaces.png)
### Bridging batman to the mesh
You will most likely want to bridge the `bat0` tunnel interface with the halow network. This is required to have batman-adv handle all of the routing across the 802.11s network.
Navigate to `Network > Interaces` and then click on the `Devices` tab.
![Bridge batman to Mesh](img/bridge-lan-to-mesh.png)
**Note**: if the `bat0` device does not appear in the list of devices and you have just created it in the previous step, you may have to click `Save & Apply` for the `bat0` device to actually be created. Once you can see the `bat0` device in the list, click the Configure... button next to the `br-ahwlan` bridge device.
![bridge bat0 to ethernet](img/bridge-bat0-to-halow.png)
Check boxes next to the interfaces you want to be bridged. Due to an idiosyncracy of OpenWRT, you will not see any wireless interfaces here. Don't worry, we will connect them to the LAN in a later step. For now, as in this example, check the `bat0` device in addition to any lan ethernet ports. Then click `Save`.
### Configurating a radio for mesh
Navigate to `Network > Wireless`
![Wireless Overview](img/wireless-overview.png)
Create a **New** Wireless network on your 802.11ah wireless card. This will most likely be the wireless card labeled `radio0`
Configure your mesh mode, Mesh ID, and the network to associate it with. Mode should be `802.11s`, Your `Mesh ID` can be anything you want, but all nodes in your mesh **must** be the same `Mesh ID`. Your network should be `batmesh_radio0` or whatever you called your interface.
You can also configure your operating frequency bandwith and channel from here. **Your bandwidth and channel must match on all mesh nodes**
![Configure Wireless For Mesh](img/configure-mesh-wifi-for-batman.png)
Click on the `Wireless Security` tab to configure your `Encryption` type and `Key`. I strongly recommend using WPA3-SAE.
![Configure Wireless Security](img/configure-mesh-security.png)
Click on the `Mesh Settings` tab. You will want to **uncheck** `Forward mesh peer traffic`. This is required to allow traffic to be routed by batman-adv. You also want to check `Mesh Gate` since this is your gateway node.
![Configure Mesh Settings](img/configure-mesh-settings-server.png)
`Save & Apply` all of your settings.
## Setup Client Node
On your client node follow the 802.11s Mesh setup wizard for a `Mesh Point`
From the sidebar menu goto **Network > Interfaces**
![Add Bat0 Device](img/Add-bat0-device.png)
Click on **Add New Interface** Button
![Add Bat0 Device Interface](img/bat0-interface.png)
From the drop-down menu `Protocol` select `Batman Device`. Give the device a name like **bat0**. Then click Create interface. This will create a tunnel device called `bat0`. OSI Layer 2 packets/frames sent over the the tunnel will be routed using the batman protocol. Next, we will be prompted to configure some batman-specific options. You can edit these options again later by clicking the Edit button next to the bat0 interface.
![Configure Bat0 Device](img/bat0-device-config.png)
You can accept most of the default options. Navigate to the `Mesh Routing` tab to make a few recommended changes.
![Mesh Routing Options](img/bat0-mesh-routing-client.png)
First, select the Routing Algorithm you want. You want to use BATMAN_V. All mesh nodes must be configured to use the same version of the batman protocol. Next, check the box to Avoid Bridge Loops. Set Gateway Mode to `Client` to explicitly tell batman that this is a client node.
Save your changes. You are finished setting up the bat0 device. Next we will create an alias interface for associating a radio with the batman mesh. Click Add new interface... again.
![Create Batman Interface](img/batman-interface-creation.png)
Select Batman Interface from the dropdown menu. Give the interface a name like batmesh. Important: do not associate the interface with a device in this menu. You will associate the interface with the bat0 batman device in the next step. For now, leave Device as unspecified and click Create Interface.
![Batman Interface Detail](img/batman-inferface-create-detail.png)
After you create the `batmesh_radio0` interface you will be prompted to configure its settings. Here you can set the Batman Device to bat0. You should not need to change any of the other default options.
`Save & Apply` your interface changes.
![Save & Apply](img/batman-save-interfaces.png)
### Bridging batman to the mesh
You will most likely want to bridge the `bat0` tunnel interface with the halow network. This is required to have batman-adv handle all of the routing across the 802.11s network.
Navigate to `Network > Interaces` and then click on the `Devices` tab.
![Bridge batman to Mesh](img/bridge-lan-to-mesh.png)
**Note**: if the `bat0` device does not appear in the list of devices and you have just created it in the previous step, you may have to click `Save & Apply` for the `bat0` device to actually be created. Once you can see the `bat0` device in the list, click the Configure... button next to the `br-ahwlan` bridge device.
![bridge bat0 to ethernet](img/bridge-bat0-to-halow.png)
Check boxes next to the interfaces you want to be bridged. Due to an idiosyncracy of OpenWRT, you will not see any wireless interfaces here. Don't worry, we will connect them to the LAN in a later step. For now, as in this example, check the `bat0` device in addition to any lan ethernet ports. Then click `Save`.
### Configurating a radio for mesh
Navigate to `Network > Wireless`
![Wireless Overview](img/wireless-overview.png)
Create a **New** Wireless network on your 802.11ah wireless card. This will most likely be the wireless card labeled `radio0`
Configure your mesh mode, Mesh ID, and the network to associate it with. Mode should be `802.11s`, Your `Mesh ID` can be anything you want, but all nodes in your mesh **must** be the same `Mesh ID`. Your network should be `batmesh_radio0` or whatever you called your interface.
You can also configure your operating frequency bandwith and channel from here. **Your bandwidth and channel must match on all mesh nodes**
![Configure Wireless For Mesh](img/configure-mesh-wifi-for-batman.png)
Click on the `Wireless Security` tab to configure your `Encryption` type and `Key`. I strongly recommend using WPA3-SAE.
![Configure Wireless Security](img/configure-mesh-security.png)
Click on the `Mesh Settings` tab. You will want to **uncheck** `Forward mesh peer traffic`. This is required to allow traffic to be routed by batman-adv. You also want to check `Mesh Gate` since this is your gateway node.
![Configure Mesh Settings](img/configure-mesh-settings-client.png)
`Save & Apply` all of your settings.
Once you have both a server and client node configured and assuming they are in range you should see them automatically associate with each other and you have successfully created an 802.11s mesh with B.A.T.M.A.N ADV. Congratulations!

187
docs/batman.md Normal file
View File

@ -0,0 +1,187 @@
---
layout: default
title: B.A.T.M.A.N. Advanced Setup
nav_order: 4
permalink: /batman-adv-setup
description: Configure B.A.T.M.A.N. advanced (batman-adv) on OpenWrt for 802.11s HaLow meshes. Covers Server/Gateway and Client nodes, bridging, wireless, security, and mesh settings.
---
# Setup batman-adv
**B.A.T.M.A.N. advanced** (batman-adv) is an implementation of the B.A.T.M.A.N. routing protocol as a Linux kernel module operating at Layer 2.
B.A.T.M.A.N. is a proactive routing protocol for wireless ad-hoc mesh networks, including Mobile Ad-Hoc Networks (MANETs). The protocol maintains information about reachable nodes (single-hop and multi-hop) and determines, for each destination, the best single-hop neighbor to forward to—without calculating full end-to-end routes—enabling efficient Layer 2 forwarding.
> **Important:** Run the **802.11s Mesh Wizard** in the Web UI **before** setting up batman-adv.
---
## Setup Server Gateway
The **Server (Gateway)** node uplinks Internet access or bridges another non-mesh network to your 802.11s mesh. Run the 802.11s Mesh Wizard using **Mesh Gate** mode first.
Open LuCI at: `http://10.42.0.1` (or your current management IP)
From the sidebar: **Network → Interfaces**
![Add Bat0 Device](pics/batman/Add-bat0-device.png)
Click **Add new interface…**
![Add Bat0 Device Interface](pics/batman/bat0-interface.png)
From **Protocol**, select **Batman Device**. Name it **bat0** and click **Create interface**.
This creates the Layer 2 tunnel device `bat0`. Frames sent across `bat0` are routed using the batman-adv protocol. Youll be prompted for batman-specific options now (can also edit later via **Edit** next to `bat0`).
![Configure Bat0 Device](pics/batman/bat0-device-config.png)
Accept most defaults, then open the **Mesh Routing** tab:
![Mesh Routing Options](pics/batman/bat0-mesh-routing-server.png)
- **Routing Algorithm:** `BATMAN_V` (all nodes must match)
- **Avoid Bridge Loops:**
- **Gateway Mode:** `Server` (this node provides the gateway)
Save changes. `bat0` is ready.
Next, create an alias interface to attach a radio to the batman mesh. Click **Add new interface…** again.
![Create Batman Interface](pics/batman/batman-interface-creation.png)
Choose **Batman Interface**. Name it something like **batmesh_radio0**.
**Important:** Do **not** select a device here; leave **Device** unspecified and click **Create interface**.
![Batman Interface Detail](pics/batman/batman-inferface-create-detail.png)
On the interface config, set **Batman Device** to **bat0**. Other defaults are usually fine.
Click **Save & Apply**.
![Save & Apply](pics/batman/batman-save-interfaces.png)
### Bridging batman-adv to the mesh
Bridge `bat0` with the HaLow mesh bridge so batman-adv handles routing across 802.11s:
Go to **Network → Interfaces → Devices**.
![Bridge batman to Mesh](pics/batman/bridge-lan-to-mesh.png)
> **Note:** If `bat0` isnt listed, make sure you **Save & Apply** the previous step so the device actually exists. Then click **Configure…** next to the `br-ahwlan` bridge.
![bridge bat0 to ethernet](pics/batman/bridge-bat0-to-halow.png)
Check the devices you want bridged (e.g., `bat0` and any LAN Ethernet ports), then **Save**.
### Configuring a radio for mesh
Go to **Network → Wireless**.
![Wireless Overview](pics/batman/wireless-overview.png)
Create a **New** wireless network on your 802.11ah card (likely `radio0`).
Set:
- **Mode:** `802.11s`
- **Mesh ID:** (choose a name; **must match across all nodes**)
- **Network:** `batmesh_radio0` (or the name you used above)
Set your **bandwidth** and **channel** here.
> **All nodes must use the same bandwidth and channel.**
![Configure Wireless For Mesh](pics/batman/configure-mesh-wifi-for-batman.png)
Open **Wireless Security** to set **Encryption** and **Key** (recommended: **WPA3-SAE**).
![Configure Wireless Security](pics/batman/configure-mesh-security.png)
Open **Mesh Settings**:
- **Forward mesh peer traffic:** **uncheck** (required so batman-adv routes traffic)
- **Mesh Gate:** **check** (this node is your gateway)
![Configure Mesh Settings](pics/batman/configure-mesh-settings-server.png)
**Save & Apply** all settings.
---
## Setup Client Node
On the client node, run the 802.11s Mesh Wizard as a **Mesh Point** first.
From **Network → Interfaces**:
![Add Bat0 Device](pics/batman/Add-bat0-device.png)
Click **Add new interface…**
![Add Bat0 Device Interface](pics/batman/bat0-interface.png)
Select **Batman Device**, name it **bat0**, and **Create interface**.
![Configure Bat0 Device](pics/batman/bat0-device-config.png)
Open **Mesh Routing**:
![Mesh Routing Options](pics/batman/bat0-mesh-routing-client.png)
- **Routing Algorithm:** `BATMAN_V` (must match Server)
- **Avoid Bridge Loops:**
- **Gateway Mode:** `Client`
Save changes. Create the alias interface:
![Create Batman Interface](pics/batman/batman-interface-creation.png)
Choose **Batman Interface**, name it (e.g., `batmesh_radio0`), leave **Device** unspecified, and **Create Interface**.
![Batman Interface Detail](pics/batman/batman-inferface-create-detail.png)
Set **Batman Device** to **bat0** and **Save & Apply**.
![Save & Apply](pics/batman/batman-save-interfaces.png)
### Bridging batman-adv to the mesh (client)
Bridge `bat0` with the mesh bridge:
**Network → Interfaces → Devices**
![Bridge batman to Mesh](pics/batman/bridge-lan-to-mesh.png)
Configure the `br-ahwlan` bridge and add `bat0`:
![bridge bat0 to ethernet](pics/batman/bridge-bat0-to-halow.png)
**Save**.
### Configuring the client radio
**Network → Wireless**
![Wireless Overview](pics/batman/wireless-overview.png)
Create a **New** network on your 802.11ah card (`radio0`):
- **Mode:** `802.11s`
- **Mesh ID:** **must match** the Server/Gateway
- **Network:** `batmesh_radio0` (or your alias name)
- **Bandwidth/Channel:** **must match** all nodes
![Configure Wireless For Mesh](pics/batman/configure-mesh-wifi-for-batman.png)
Set **Wireless Security** (WPA3-SAE recommended):
![Configure Wireless Security](pics/batman/configure-mesh-security.png)
Open **Mesh Settings**:
- **Forward mesh peer traffic:** **uncheck** (let batman-adv route)
- **Mesh Gate:** **uncheck** (client node)
![Configure Mesh Settings](pics/batman/configure-mesh-settings-client.png)
**Save & Apply** all settings.
---
Once both Server and Client nodes are configured (and in range), they should automatically associate and youll have an 802.11s mesh routed by **batman-adv**. 🎉

50
docs/index.md Normal file
View File

@ -0,0 +1,50 @@
---
layout: home
title: OpenMANET
nav_order: 1
permalink: /
description: Raspberry Pibased MANET radio built on Wi-Fi HaLow (802.11ah) with 802.11s + batman-adv, GPS-driven range testing, and PTT support.
---
# OpenMANET Project
**OpenMANET** is a Raspberry Pibased MANET (Mobile Ad-Hoc Network) radio built on **Wi-Fi HaLow (802.11ah)**.
Its designed around Raspberry Pi HATs and currently built specifically for the Seeed HaLow board, with plans to add support for other devices later.
---
## Description
This project aims to provide a flexible HaLow mesh radio using Raspberry Pi hardware and HaLow HATs. A number of optional components are supported; current testing includes the WaveShare 1850 UPS for power and the Panda Wireless PAU06 USB Wi-Fi adapter (additional drivers are included but not yet fully tested).
> Note: On most Raspberry Pi models, the onboard Wi-Fi shares the SDIO address with HaLow modules and cannot be used for client networking in this setup. Use a USB Wi-Fi adapter or the Ethernet port on the Raspberry Pi 4 to bridge connectivity.
---
## Roadmap
- Enclosure design
- Investigate USB OTG/Ethernet Gadget mode to allow EUDs to connect without USB-to-Ethernet adapters
- Test **batman-adv** mesh networking
---
## In Progress
- GPS-based range-testing script using GPSD, logging GPS location, RSSI, and SNR for analysis
- PTT (Push-to-Talk) application so the radio is functional without an EUD
- Support for Seeed HaLow HATs now; other boards will be added later
- Raspberry Pi 3B+ and 2W support
- Testing the GPS module included on the Seeed 40-pin board
---
## Advantages vs. the Seeed image
- Custom BCF configuration increases TX power (≈21 dBm → **27 dBm**)
- Newer build than the Seeed image
- Includes **802.11s** and **batman-adv** support
---
## 📡 Range Testing
Want to see how OpenMANET performs in the field?
Check out the dedicated **[Wi-Fi HaLow Range Testing](./range-testing.html)** page for detailed results, images, and notes from real-world testing.
---

169
docs/initial-setup.md Normal file
View File

@ -0,0 +1,169 @@
---
layout: default
title: Initial Setup
nav_order: 3
description: Step-by-step guide to flashing, configuring, and deploying OpenMANET on Raspberry Pi HaLow HATs.
---
# Initial Setup
This page walks you through downloading, flashing, and configuring the OpenMANET image on your Raspberry Pi HaLow HATs, plus initial mesh configuration tips and topology examples.
---
## Setup Steps
1. **Download the latest OpenMANET image**
Go to the Releases section: [OpenMANET OpenWrt Releases](https://github.com/OpenMANET/openwrt/releases) and download the image.
2. **Flash the image to an SD card**
Use the official Raspberry Pi guide for instructions on flashing the image:
[Raspberry Pi Getting Started Guide](https://www.raspberrypi.com/documentation/computers/getting-started.html)
3. **Initial connection**
When first powered on, the Pi boots with a static IP of `10.42.0.1`.
Connect your computer directly via Ethernet and set your computer to obtain an IP automatically.
Your computer should get an IP address in that range from the Pi and you will be able to access the Pi at `10.42.0.1` in a web browser.
The default username is `root`, and the default password is blank.
If your computer is connected to WiFi, you can plug the RPi into your Ethernet adapter and still stay connected to the internet at the same time.
*Note: after running the initial wizard, you will use the password you set.*
4. **Initial configuration**
Follow the steps in the Morse Micro EKH01 User Guide:
[MM6108-EKH01 User Guide PDF](https://www.morsemicro.com/wp-content/uploads/2024/12/MM6108-EKH01-Eval-Kit-User-Guide-v18.pdf)
It is recommended to complete Section 3.1 “Initial Setup” first, then Section 3.9 “802.11s Mesh Configuration” to establish your initial mesh link.
5. **Switch to DHCP for normal operation**
After completing the initial configuration, OpenWrt will set the nodes to use DHCP. This allows the Pi to automatically obtain an IP address from any connected network without manual configuration.
If you are using these in a disconnected environment, it may make sense to set static IP addresses on the radios and your EUDs.
Tested with a local home network and with a Starlink Mini providing DHCP.
6. **Optionally set up batman-adv**
`batman-adv` is a layer 2 mesh routing setup that is self-healing and optimizes connectivity between multiple mesh nodes and gateways.
[Setup batman-adv](./batman-adv-setup.md)
---
## Mesh Gate vs. Mesh Point
When configuring 802.11s with the Seeed HaLow HAT, there are two main node types:
### Mesh Gate
Think of a Mesh Gate as the “hub” of your mesh. Its the point where your next-hop connection (like an upstream internet connection or Starlink Mini) is attached. Mesh Gates have two operating modes:
- **Bridged Mode**
Ethernet and the HaLow mesh are bridged together. The same IP range and the same DHCP server as the Ethernet side are used. This is useful when you want to extend an existing network — e.g., your home network or a Starlink Mini router.
- **Router Mode**
The Mesh Gate acts as its own NAT router. The mesh network gets its own subnet, and traffic is NATd to the upstream network. The Mesh Gate also runs DHCP and DNS, allowing your Raspberry Pis to resolve each other by hostname. This option is best for disconnected environments where theres no upstream network or internet.
### Mesh Point
A Mesh Point is a node that connects to the 802.11s mesh. It can bridge its Ethernet or 2.4/5 GHz Wi-Fi interface into the HaLow mesh.
**Recommendation:** For the first-time setup, do NOT enable bridging on the Mesh Point. This makes it easier to confirm connectivity by checking the Mesh Gate first. Once you verify the Mesh Point is joining the mesh, rerun the wizard and enable bridging.
If your node does not connect over HaLow, you will not be able to connect without connecting physically.
Later, you can enable bridge mode so youre on the same network as other EUDs.
---
## Topology Examples (ASCII Diagrams)
### A) Mesh Gate in BRIDGED Mode (extending an existing network/DHCP)
```
(Upstream Router / Starlink Mini)
|
[ Ethernet ]
|
+----------------------+
| Mesh Gate (BRIDGED) |
| br-ahwlan: eth0+ah |
+----------------------+
)))))) 802.11s ((((((
________/ | \________
/ | \
+----------------+ +----------------+ +----------------+
| Mesh Point A | | Mesh Point B | | Mesh Point C |
| (no bridge 1st)| | (bridge later) | | (bridge later) |
+----------------+ +----------------+ +----------------+
| \ | \ | \
[EUD A] [WiFi AP] [EUD B] [WiFi AP] [EUD C] [WiFi AP]
```
**Notes:**
- Same IP range as the upstream router.
- Upstream routers DHCP server hands out addresses to both Ethernet and 802.11s clients (via the bridge).
- Useful for extending home/office networks or using Starlink Mini as the router.
### B) Mesh Gate in ROUTER Mode (own subnet, NAT to upstream, works offline)
```
(Optional Upstream Router / Internet)
|
[ Ethernet ]
|
+------------------------------------+
| Mesh Gate (ROUTER / NAT / DHCP/DNS|
| LAN = 802.11s mesh subnet |
+------------------------------------+
)))))) 802.11s ((((((
________/ | \________
/ | \
+----------------+ +----------------+ +----------------+
| Mesh Point A | | Mesh Point B | | Mesh Point C |
| (bridge later) | | (bridge later) | | (bridge later) |
+----------------+ +----------------+ +----------------+
| \ | \ | \
[EUD A] [WiFi AP] [EUD B] [WiFi AP] [EUD C] [WiFi AP]
```
**Notes:**
- Mesh Gate supplies DHCP/DNS on the mesh subnet.
- Traffic from mesh NATs to the upstream (if present).
- Works well in disconnected/off-grid scenarios; clients still have local name resolution and services.
---
## Notes for Disconnected Environments
In situations without DHCP, you can configure static IPs. The DHCP range is `192.168.12.100` to `192.168.12.255`, so make sure you assign your IPs outside of this range. Start with `192.168.12.2`.
- On your EUD (end-user device), assign a static IP in the mesh subnet to avoid losing connectivity if DHCP isnt available.
- On your Raspberry Pi radios, go to Quick Config in the UI, and set a static IP on the `ahwlan` interface. You can find the currently assigned IP from your DHCP server and then convert it to static.
---
## GPS Range Testing Script
A range-test script is included in the `scripts` folder. It uses the GPS module listed in the parts list to measure ping, RSSI, and SNR. You can use SCP to transfer the file to the Pi.
```bash
cp scripts/rangetest.sh /root/
chmod +x /root/rangetest.sh
```
It is recommended to run it inside `tmux` so it continues running even if you disconnect.
---
## Parts List
| Item | Link | Optional |
|---------------------------------------|----------------------------------------------------------------------------------------------------------|----------|
| Wio WM6180 Wi-Fi HaLow mini PCIe Module | https://www.seeedstudio.com/Wio-WM6180-Wi-Fi-HaLow-mini-PCIe-Module-p-6394.html | No |
| WM1302 Pi Hat | https://www.seeedstudio.com/WM1302-Pi-Hat-p-4897.html | No |
| External Antenna 868/915 MHz 2 dBi SMA L195 mm Foldable | https://www.seeedstudio.com/External-Antenna-868-915MHZ-2dBi-SMA-L195mm-Foldable-p-5863.html | No |
| UF.L to SMA-K 1.13 mm 120 mm Cable | https://www.seeedstudio.com/UF-L-SMA-K-1-13-120mm-p-5046.html | No |
| Raspberry Pi 4 Computer Model B 1 GB | https://www.seeedstudio.com/Raspberry-Pi-4-Computer-Model-B-1GB-p-4078.html | No |
| 21700 Batteries | https://www.amazon.com/dp/B0D3GX96H6?ref_=ppx_hzsearch_conn_dt_b_fed_asin_title_4 | Yes |
| WaveShare UPS B | https://www.amazon.com/gp/product/B0D39VDMDP/ref=ox_sc_saved_title_1?smid=A3B0XDFTVR980O&psc=1 | Yes |
| Panda USB Wi-Fi Adapter (PAU06) | https://www.amazon.com/dp/B00762YNMG?ref_=ppx_hzsearch_conn_dt_b_fed_asin_title_1 | Yes |
| GPS USB Adapter | https://www.amazon.com/dp/B01MTU9KTF?ref_=ppx_hzsearch_conn_dt_b_fed_asin_title_1 | Yes |
---
## Project Photos
![Setup photo 1](./pics/IMG_8358.jpg)
![Setup photo 2](./pics/IMG_8359.jpg)
![Setup photo 3](./pics/IMG_8360.jpg)
![Setup photo 4](./pics/IMG_8362.jpg)

View File

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

View File

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 3.2 MiB

View File

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

View File

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

View File

Before

Width:  |  Height:  |  Size: 2.1 MiB

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 250 KiB

After

Width:  |  Height:  |  Size: 250 KiB

View File

Before

Width:  |  Height:  |  Size: 225 KiB

After

Width:  |  Height:  |  Size: 225 KiB

View File

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB

View File

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 107 KiB

View File

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 107 KiB

View File

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

View File

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

@ -1,3 +1,10 @@
---
layout: default
title: Range Testing
nav_order: 2
description: Field test results of Wi-Fi HaLow (802.11ah) mesh networking with Raspberry Pi HATs at Pulpit Rock, Colorado Springs.
---
# Wi-Fi HaLow Range Testing — Pulpit Rock, Colorado Springs
This round of testing went pretty well overall. The setup was running on a **2 MHz channel (42 @ 923 MHz)** with just **two nodes** in the 802.11s mesh. Speeds were tested using the Google Speed Test app on my iPhone (shouldve used `iperf3`—next time).
@ -20,38 +27,30 @@ Next round of testing will be with **multiple nodes** and on **1, 4, and 8 MHz c
| Baseball lot | ~669 | ~0.42 | 2.77 | 1.37 |
| Neighborhood | ~1,038 | ~0.65 | 0.33 | N/A |
---
## Test Images
### IMG_8480 — Equipment Setup
![IMG_8480](./pics/IMG_8480.jpg)
Equipment staged on top of Pulpit Rock, running the Wi-Fi HaLow mesh.
---
### IMG_8481 — View to Baseball Parking Lot
![IMG_8481](./pics/IMG_8481.jpg)
Looking out from the Rock toward the baseball lot, one of the test points.
---
### IMG_8482 — Parking Garage
![IMG_8482](./pics/IMG_8482.jpg)
View from the Rock to the parking garage, almost a mile away.
---
### IMG_8484 — Hospital View
![IMG_8484](./pics/IMG_8484.jpg)
Taken from the hospital parking lot, showing the Rock in the distance.
---
### IMG_8489 — Neighborhood View
![IMG_8489](./pics/IMG_8489.jpg)
Obstructed line-of-sight to the Rock from inside a neighborhood.
---
### IMG_8491 — Rock From Parking Garage
![IMG_8491](./pics/IMG_8491.jpg)
View of the Rock as seen from the parking garage test location.
View of the Rock as seen from the parking garage test location.