refactor #1 + adding documentation (#36)
Build and publish release / metadata (push) Successful in 44s
Build and publish release / create-release (push) Successful in 49s
Build and publish release / publish-release (push) Canceled after 0s
Build and publish release / build (push) Canceled after 7m44s

Reviewed-on: #36
Co-authored-by: Koda YeenBean <n122330@gmail.com>
This commit was merged in pull request #36.
This commit is contained in:
2026-07-19 21:26:28 +01:00
committed by Koda
parent db81260d7f
commit 3fcd99af1f
31 changed files with 4068 additions and 2598 deletions
+31 -9
View File
@@ -7,13 +7,13 @@ Daemon that makes an OpenWrt router appear as a UniFi AP to UniFi Network contro
| Feature | Description | Implementation |
| --- | --- | --- |
| **L2 Discovery** | UDP broadcast + multicast every 10s | `announce.c` → port 10001 |
| **Adoption** | AES-128-CBC handshake with the controller | `inform.c``handle_response()` |
| **Remote reboot** | Reboots OpenWrt when requested by the controller | `inform.c``handle_response()` |
| **Firmware spoofing** | Persists and reports the target version requested by an upgrade | `inform.c``handle_response()` |
| **WiFi Config** | Creates WiFi networks from the controller via UCI | `wlan.c``wlan_apply_config()` |
| **Band Steering** | 802.11k/v Neighbor Reports + BSS Transition | `wlan.c``apply_vap()` |
| **Fast Roaming** | 802.11r FT with mobility_domain derived from MAC | `wlan.c``apply_vap()` |
| **WPA3 / PMF** | SAE, SAE-mixed, 802.11w 0/1/2 | `wlan.c``sec_to_uci()` |
| **Adoption** | AES-128-CBC/GCM handshake with the controller | `inform/response.c``inform_handle_response()` |
| **Remote reboot** | Reboots OpenWrt when requested by the controller | `inform/response.c``inform_handle_response()` |
| **Firmware spoofing** | Persists and reports the target version requested by an upgrade | `inform/response.c``inform_handle_response()` |
| **WiFi Config** | Creates WiFi networks from the controller via UCI | `wlan/provision.c``wlan_apply_config()` |
| **Band Steering** | 802.11k/v Neighbor Reports + BSS Transition | `wlan/provision.c` and `wlan/uci.c` |
| **Fast Roaming** | 802.11r FT with a stable SSID mobility domain | `wlan/provision.c``apply_vap()` |
| **WPA3 / PMF** | SAE, SAE-mixed, 802.11w 0/1/2 | `wlan/common.c` and `wlan/provision.c` |
| **WiFi Clients** | MAC, signal, bitrate, bytes per VAP | `clients.c``iw station dump` |
| **Wired Clients** | MACs from bridge FDB | `clients.c``bridge fdb` |
| **CPU / RAM** | Real-time usage | `sysinfo.c``/proc/stat` + `/proc/meminfo` |
@@ -46,6 +46,28 @@ make -f Makefile.standalone
Contributors and AI agents should read [`AGENTS.md`](AGENTS.md) for the concise
architecture map, invariants, and validation checklist.
## Developer documentation and Gitea Wiki
The publish-ready Gitea Wiki pages live in [`wiki/`](wiki/). They include a
developer guide, a generated Mermaid function-call graph, and runtime flow
charts. Refresh them after source or architecture changes:
```shell
./scripts/docs/generate-wiki.py
```
Use the same tool as a linter to reject stale pages, oversized C modules,
missing documented entry points, or known non-English comment fragments:
```shell
./scripts/docs/generate-wiki.py --check
```
Because Gitea stores Wiki pages in a separate Git repository, publishing is an
explicit authenticated step: `./scripts/docs/publish-wiki.sh`. The script
derives the `.wiki.git` URL from `origin` and accepts an explicit URL override.
No credentials are stored in this repository.
## Automated releases
Every push to `main` runs `.gitea/workflows/release.yaml`. It builds with pinned
@@ -106,7 +128,7 @@ On the access point, run the following to install the package:
apk del wpad-basic-mbedtls && apk add wpad-mbedtls && /etc/init.d/network restart
# Remove old installation
apk -r del openuf
apk -r del openuf
# Install new version
apk add openuf-0.4.0-r3.apk --allow-untrusted
@@ -146,7 +168,7 @@ version in `state.json` and reports it in subsequent inform packets.
## Glossary
### TNBU
### TNBU
TNBU is the magic string/identifier at the start of the binary packet format used in this custom Inform protocol implementation.