Files
Nils Andreas Svee 4770b4fb5d docs(reflectors): bundle protocol-aware inventory and configuration examples
Replace the ICMP-only inventory with protocol-aware records, remove Mullvad DNS entries and omit misleading anycast countries. Document IRTT authentication and explicit TOML/UCI reflector configuration, including disabling file loading.
2026-10-14 12:50:29 +07:00

80 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Summary
**sqm‑autorate‑rust** is a Rust re‑implementation of the original sqm‑autorate tool, which dynamically adjusts CAKE SQM bandwidth settings by measuring traffic load and latency – ideal for variable DOCIS/cable or LTE/wireless links where capacity fluctuates. This port preserves the original’s adaptive control logic while leveraging Rust’s type safety, performance, and concurrency primitives to deliver a more robust, maintainable codebase.
## Features
* **Adaptive rate control**: continuously measures one‑way delay baselines and traffic load to tune both download and upload shaping rates in real­time .
* **Multiple measurement types**: prefers ICMP timestamps by default, but also supports ICMP echo requests as a fallback for networks where timestamps are blocked
* **Concurrent architecture**: separates packet sending, receiving, baselining, reflector reselection and rate‑controller loops into dedicated threads for maximum responsiveness .
* **Configurable via environment or UCI**: reads settings from environment variables or OpenWRT UCI, with sensible defaults and type‑safe parsing .
* **Minimal dependencies**: relies on Rust crates only (anyhow, socket2, neli, rustix), no external scripts .
## Installation
You can install **sqm‑autorate‑rust** in two ways:
### 1. Native Rust build
1. Ensure you have the Rust toolchain (1.70+), Cargo, and `libnl` headers installed on your Linux host.
2. Clone and build:
```bash
git clone https://github.com/Lochnair/sqm-autorate-rust.git
cd sqm-autorate-rust
cargo build --release
```
3. The optimized binary is at `target/release/sqm-autorate-rust`.
### 2. OpenWrt SDK build
You can also build an OpenWrt package to install in your images with the SDK:
1. **Prepare the OpenWrt SDK**
```bash
# Download and extract the matching SDK for your target platform
tar xJf openwrt-sdk-*.tar.xz
cd openwrt-sdk-*
```
2. **Add the ****************************`openwrt-feeds`**************************** repository**
```bash
# Add the feed to feeds.conf.default
echo 'src-link lochnair https://github.com/Lochnair/openwrt-feeds.git' >> feeds.conf.default
./scripts/feeds update lochnair
./scripts/feeds install sqm-autorate-rust
```
3. **Configure and build the package**
```bash
make menuconfig # navigate to Network → sqm-autorate-rust, enable it
make package/sqm-autorate-rust/{clean,compile} V=s
```
4. **Install on your device**
```bash
# Copy the generated .ipk from bin/packages/... to your router
opkg install sqm-autorate-rust_*.ipk
```
## Reflector files and inline UCI reflectors
Inline `config reflector` sections supplement the default
`/etc/sqm-autorate-rust/reflectors.csv`. To use only inline reflectors, explicitly
disable file loading:
```uci
config reflectors
option files 'none'
config reflector
option host 'global.irtt.lochnair.net'
list protocols 'irtt'
```
Use `list files '/path/to/reflectors.csv'` instead of `option files 'none'` to
combine CSV files with inline reflectors. Omitting `files` keeps the default CSV;
UCI discards empty string options, so `option files ''` does not disable it.
Absent or blank `irtt_hmac` values use unauthenticated IRTT sessions.