Add Jekyll
@ -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
@ -0,0 +1,5 @@
|
||||
_site
|
||||
.sass-cache
|
||||
.jekyll-cache
|
||||
.jekyll-metadata
|
||||
vendor
|
||||
25
docs/404.html
Normal 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
@ -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
@ -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
@ -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 Pi–based 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
|
||||
29
docs/_posts/2025-09-11-welcome-to-jekyll.markdown
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Welcome to Jekyll!"
|
||||
date: 2025-09-11 14:13:46 -0600
|
||||
categories: jekyll update
|
||||
---
|
||||
You’ll 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 [Jekyll’s 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/
|
||||
@ -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**
|
||||
|
||||

|
||||
|
||||
Click on **Add New Interface** Button
|
||||
|
||||

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

|
||||
|
||||
You can accept most of the default options. Navigate to the `Mesh Routing` tab to make a few recommended changes.
|
||||
|
||||

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

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

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

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
**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.
|
||||
|
||||

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

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

|
||||
|
||||
Click on the `Wireless Security` tab to configure your `Encryption` type and `Key`. I strongly recommend using WPA3-SAE.
|
||||
|
||||

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

|
||||
|
||||
`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**
|
||||
|
||||

|
||||
|
||||
Click on **Add New Interface** Button
|
||||
|
||||

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

|
||||
|
||||
You can accept most of the default options. Navigate to the `Mesh Routing` tab to make a few recommended changes.
|
||||
|
||||

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

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

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

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
**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.
|
||||
|
||||

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

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

|
||||
|
||||
Click on the `Wireless Security` tab to configure your `Encryption` type and `Key`. I strongly recommend using WPA3-SAE.
|
||||
|
||||

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

|
||||
|
||||
`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
@ -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**
|
||||
|
||||

|
||||
|
||||
Click **Add new interface…**
|
||||
|
||||

|
||||
|
||||
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. You’ll be prompted for batman-specific options now (can also edit later via **Edit** next to `bat0`).
|
||||
|
||||

|
||||
|
||||
Accept most defaults, then open the **Mesh Routing** tab:
|
||||
|
||||

|
||||
|
||||
- **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.
|
||||
|
||||

|
||||
|
||||
Choose **Batman Interface**. Name it something like **batmesh_radio0**.
|
||||
**Important:** Do **not** select a device here; leave **Device** unspecified and click **Create interface**.
|
||||
|
||||

|
||||
|
||||
On the interface config, set **Batman Device** to **bat0**. Other defaults are usually fine.
|
||||
Click **Save & Apply**.
|
||||
|
||||

|
||||
|
||||
### 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**.
|
||||
|
||||

|
||||
|
||||
> **Note:** If `bat0` isn’t listed, make sure you **Save & Apply** the previous step so the device actually exists. Then click **Configure…** next to the `br-ahwlan` bridge.
|
||||
|
||||

|
||||
|
||||
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**.
|
||||
|
||||

|
||||
|
||||
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.**
|
||||
|
||||

|
||||
|
||||
Open **Wireless Security** to set **Encryption** and **Key** (recommended: **WPA3-SAE**).
|
||||
|
||||

|
||||
|
||||
Open **Mesh Settings**:
|
||||
- **Forward mesh peer traffic:** **uncheck** (required so batman-adv routes traffic)
|
||||
- **Mesh Gate:** **check** (this node is your gateway)
|
||||
|
||||

|
||||
|
||||
**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**:
|
||||
|
||||

|
||||
|
||||
Click **Add new interface…**
|
||||
|
||||

|
||||
|
||||
Select **Batman Device**, name it **bat0**, and **Create interface**.
|
||||
|
||||

|
||||
|
||||
Open **Mesh Routing**:
|
||||
|
||||

|
||||
|
||||
- **Routing Algorithm:** `BATMAN_V` (must match Server)
|
||||
- **Avoid Bridge Loops:** ✅
|
||||
- **Gateway Mode:** `Client`
|
||||
|
||||
Save changes. Create the alias interface:
|
||||
|
||||

|
||||
|
||||
Choose **Batman Interface**, name it (e.g., `batmesh_radio0`), leave **Device** unspecified, and **Create Interface**.
|
||||
|
||||

|
||||
|
||||
Set **Batman Device** to **bat0** and **Save & Apply**.
|
||||
|
||||

|
||||
|
||||
### Bridging batman-adv to the mesh (client)
|
||||
|
||||
Bridge `bat0` with the mesh bridge:
|
||||
|
||||
**Network → Interfaces → Devices**
|
||||
|
||||

|
||||
|
||||
Configure the `br-ahwlan` bridge and add `bat0`:
|
||||
|
||||

|
||||
|
||||
**Save**.
|
||||
|
||||
### Configuring the client radio
|
||||
|
||||
**Network → Wireless**
|
||||
|
||||

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

|
||||
|
||||
Set **Wireless Security** (WPA3-SAE recommended):
|
||||
|
||||

|
||||
|
||||
Open **Mesh Settings**:
|
||||
- **Forward mesh peer traffic:** **uncheck** (let batman-adv route)
|
||||
- **Mesh Gate:** **uncheck** (client node)
|
||||
|
||||

|
||||
|
||||
**Save & Apply** all settings.
|
||||
|
||||
---
|
||||
|
||||
Once both Server and Client nodes are configured (and in range), they should automatically associate and you’ll have an 802.11s mesh routed by **batman-adv**. 🎉
|
||||
50
docs/index.md
Normal file
@ -0,0 +1,50 @@
|
||||
---
|
||||
layout: home
|
||||
title: OpenMANET
|
||||
nav_order: 1
|
||||
permalink: /
|
||||
description: Raspberry Pi–based 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 Pi–based MANET (Mobile Ad-Hoc Network) radio built on **Wi-Fi HaLow (802.11ah)**.
|
||||
It’s 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
@ -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. It’s 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 NAT’d 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 there’s 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 you’re 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 router’s 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 isn’t 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
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 3.2 MiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 250 KiB |
|
Before Width: | Height: | Size: 225 KiB After Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
@ -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 (should’ve 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
|
||||

|
||||
Equipment staged on top of Pulpit Rock, running the Wi-Fi HaLow mesh.
|
||||
|
||||
---
|
||||
|
||||
### IMG_8481 — View to Baseball Parking Lot
|
||||

|
||||
Looking out from the Rock toward the baseball lot, one of the test points.
|
||||
|
||||
---
|
||||
|
||||
### IMG_8482 — Parking Garage
|
||||

|
||||
View from the Rock to the parking garage, almost a mile away.
|
||||
|
||||
---
|
||||
|
||||
### IMG_8484 — Hospital View
|
||||

|
||||
Taken from the hospital parking lot, showing the Rock in the distance.
|
||||
|
||||
---
|
||||
|
||||
### IMG_8489 — Neighborhood View
|
||||

|
||||
Obstructed line-of-sight to the Rock from inside a neighborhood.
|
||||
|
||||
---
|
||||
|
||||
### IMG_8491 — Rock From Parking Garage
|
||||

|
||||
View of the Rock as seen from the parking garage test location.
|
||||
View of the Rock as seen from the parking garage test location.
|
||||