Skip to content

Commit 85266f6

Browse files
committed
chore(docs) Update docs ahead of 1.1.0 release
1 parent 70cef31 commit 85266f6

5 files changed

Lines changed: 61 additions & 13 deletions

File tree

BENCHMARKS.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ RXNM replaces heavy middleware with a direct, zero-dependency model. DBus-Lite m
7070
| **Total Disk Size** | **\~300 KB** | \~5.2 MB | \~400 KB | \~18.5 MB |
7171
| **Breakdown** | 50KB Agent + 250KB Shell | Binaries + Plugins | Daemon + Scripts | Binaries + JNI |
7272
| **Library Sprawl** | **0 Files** (Static) | \~140+ (.so) | \~15+ (.so) | \~65+ (.so) |
73-
| **Privilege Model** | **Capabilities (cap_net)** | Root Daemon | Root Daemon | SELinux + Netd |
73+
| **Privilege Model** | **Capabilities (cap_sys_admin, cap_net_admin)** | Root Daemon | Root Daemon | SELinux + Netd |
7474
| **Immutable Support** | **Native (/run based)** | Challenging | Native | Native (A/B) |
7575

7676
---
@@ -177,4 +177,10 @@ While RXNM is optimized for high-performance embedded scenarios, its design phil
177177

178178
RXNM achieves functional parity with the **Android Networking Stack** (eBPF filtering, L2/L3 handoff, firmware-gated init) while maintaining the resource footprint of a minimalist embedded environment. It remains the "Third Way" for high-performance handheld and RISC-V development.
179179

180+
### 📣 Call for Testers & Integrators!
181+
182+
If RXNM's zero-resident, sub-5ms architecture sounds like the right fit for your embedded project, Linux distribution, or specific use case, we would love to hear from you! We are actively looking for integrators to stress-test these capabilities.
183+
184+
*Please note: We track all issues, feature requests, and bug reports through our primary Codeberg repository. (The GitHub mirror is strictly read-only for CI purposes). Head over to Codeberg to join the discussion!*
185+
180186
© 2026-present Joel Wirāmu Pauling

BUILD.md

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Several critical paths have specific fallbacks when preferred tools are absent.
4848

4949
## 🚀 Build Profiles
5050

51-
RXNM provides three primary compilation targets depending on your deployment constraints.
51+
RXNM provides four primary compilation targets depending on your deployment constraints.
5252

5353
### 1. The Standard Build (Dynamic Linking)
5454

@@ -58,6 +58,7 @@ Best for desktop development, debugging, or standard glibc-based distributions (
5858
make
5959
sudo make install
6060
61+
6162
```
6263

6364
* **Result:** Dynamically linked `rxnm-agent` and modular shell libraries in `/usr/lib/rocknix-network-manager/lib/`.
@@ -72,6 +73,7 @@ Best for standard embedded devices, initramfs, or Alpine/Buildroot environments.
7273
make tiny
7374
sudo make install
7475
76+
7577
```
7678

7779
* **Result:** Statically linked `rxnm-agent`.
@@ -89,6 +91,7 @@ This target triggers `scripts/bundle.sh` to forcefully strip out enterprise netw
8991
```
9092
make rocknix-release
9193
94+
9295
```
9396

9497
* **Result:** Outputs exactly two files to the `build/` directory:
@@ -99,6 +102,17 @@ make rocknix-release
99102

100103
* **Validation:** Automatically runs a dedicated bundle fuzzer to ensure the script amalgamation did not introduce syntax errors.
101104

105+
### 4. The Full Combined Bundle
106+
107+
**Target:** Embedded environments requiring Enterprise networking features (Overlay Tunnels, Service Namespaces, VRF, Bond, MPLS stubs) without the filesystem overhead of multiple module files.
108+
109+
```
110+
make combined-full
111+
112+
```
113+
114+
* **Result:** A single, monolithic script (`build/rxnm-full`) containing the entirety of RXNM's capabilities, paired with the static `build/rxnm-agent`.
115+
102116
## 🔀 Architecture: Dual Execution Paths (Bash vs. POSIX)
103117

104118
RXNM is uniquely designed to adapt its execution strategy based on the host shell environment. It dynamically selects between two distinct architectural paths at runtime.
@@ -156,6 +170,7 @@ Runs basic linting, binary footprint validation, and Phase 2 Netlink checks.
156170
```
157171
make check
158172
173+
159174
```
160175

161176
### Full Regression Suite
@@ -165,6 +180,7 @@ Executes the entire local validation matrix (Fuzzing, Consistency, Profiling).
165180
```
166181
make test-all
167182
183+
168184
```
169185

170186
#### Test Matrix Breakdown:
@@ -173,6 +189,10 @@ make test-all
173189

174190
* **Foundation (`test_foundation.sh`):** Validates static linkage, binary size limits (<100KB), and timestamp synchrony.
175191

192+
* **Core Agent (`test_phase2.sh`):** Validates raw Netlink parsing (Interface/IP existence) and experimental module syntax.
193+
194+
* **JSON Querying (`test_query.sh`):** Validates the Agent's `--get` dot-notation data extraction path.
195+
176196
* **Consistency (`test_consistency.sh`):** Strict JSON diffing. Compares the hardware data (IPs, Routes, MACs) extracted by the C-Agent against data parsed by the legacy Shell fallback.
177197

178198
* **Performance (`test_performance.sh`):** Nanosecond latency benchmarking. Ensures the Agent responds in `< 5ms` on average, failing the build if a performance regression occurs.
@@ -181,6 +201,8 @@ make test-all
181201

182202
* **Fuzzing (`test_cli_fuzz.sh` & `test_bundle_fuzz.sh`):** Injects malformed arguments into the CLI dispatcher within an isolated, mocked environment to ensure graceful degradation (no unhandled shell panics).
183203

204+
* **Verification (`verify_release.sh`):** End-to-end integration checks for Service Namespaces (`CLONE_NEWNET`), experimental stub correctness, and pure bash degradation handling.
205+
184206
### Interoperability Tests (Systemd-Nspawn)
185207

186208
The deepest level of testing spins up isolated OS containers (`systemd-nspawn`) connected via virtual bridges to simulate real-world hotplugging, DHCP convergence, and XDP behavior.
@@ -192,13 +214,14 @@ sudo ./tests/integration/run_interop.sh
192214
# Test the flat-file ROCKNIX minimal bundle architecture
193215
sudo ./tests/integration/run_rocknix_interop.sh
194216
217+
195218
```
196219

197220
## 📂 Installation Paths
198221

199222
`make install` deploys files to standard system paths compliant with FHS and systemd conventions.
200223

201-
> **Security Note:** `rxnm-agent` uses `setns(fd, CLONE_NEWNET)` for namespace and service operations, which requires `CAP_SYS_ADMIN`. It must be run as root or granted the capability (e.g. via `setcap cap_sys_admin+ep`). In `systemd-nspawn` environments, passing `--capability=all` covers this. In production systemd units, consider adding `AmbientCapabilities=CAP_SYS_ADMIN`.
224+
> **Security Note:** `rxnm-agent` uses `setns(fd, CLONE_NEWNET)` for namespace and service operations, which requires `CAP_SYS_ADMIN` and `CAP_NET_ADMIN`. It must be run as root or granted the capability (e.g. via `setcap cap_sys_admin,cap_net_admin+ep`). In `systemd-nspawn` environments, passing `--capability=all` covers this. In production systemd units, consider adding `AmbientCapabilities=CAP_SYS_ADMIN CAP_NET_ADMIN`.
202225
203226
**Note on the Main Entry Point:** To protect the relative path hierarchy required by the modular library system (and to keep `/usr/bin/` clean), the actual executable script is installed to `/usr/lib/rocknix-network-manager/bin/rxnm`. A symbolic link is then placed at `/usr/bin/rxnm` to expose the command globally. The dispatcher script inherently uses `readlink` to resolve its true location before attempting to source dependencies from `../lib/`.
204227

@@ -211,13 +234,14 @@ sudo ./tests/integration/run_rocknix_interop.sh
211234
| **Templates** | `/usr/lib/systemd/network/` | Configuration defaults (e.g., USB Gadget, WiFi). |
212235
| **Hooks** | `/usr/lib/systemd/system-sleep/rxnm-resume` | WiFi state restoration logic for suspend. |
213236
| **Completion** | `/usr/share/bash-completion/completions/rxnm` | Tab completion logic. |
214-
| **Service** | `/etc/systemd/system/rxnm.service` | Main boot-time orchestrator service. |
237+
| **Systemd Units** | `systemd/*` (Provided in source) | Boot-time orchestration service (`rxnm.service`) and REST-Lite Socket interfaces (`rxnm-api.socket`). *Note: Handled by OS Packagers, not copied by `make install`.* |
215238

216239
To override the installation prefix (default `/usr`):
217240

218241
```
219242
make install PREFIX=/usr/local
220243
244+
221245
```
222246

223247
## ⚔️ Cross-Compilation
@@ -230,6 +254,7 @@ RXNM's zero-dependency design makes it trivial to cross-compile for target embed
230254
export CC=aarch64-linux-gnu-gcc
231255
make tiny
232256
257+
233258
```
234259

235260
### Cross-Compiling for RISC-V
@@ -238,6 +263,7 @@ make tiny
238263
export CC=riscv64-linux-gnu-gcc
239264
make tiny
240265
266+
241267
```
242268

243269
## 🧹 Cleaning Up
@@ -247,4 +273,5 @@ To remove build artifacts, object files, generated headers, and temporary build
247273
```
248274
make clean
249275
276+
250277
```

NULLIFY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ This creates a targeted "Logical Kill-Switch." In this scenario, the physical Wi
134134

135135
During the design phase, extending eBPF to Bluetooth via `BPF_PROG_TYPE_SOCKET_FILTER` was evaluated and rejected. Raw socket filters in Linux act as sniffers; dropping a BLE packet in a socket filter only hides it from the daemon holding the socket, it *does not* prevent the kernel's HCI core from processing the packet and waking the system.
136136

137-
* **The RXNM Approach:** To establish a true logical air-gap and save power, we use the native `hciconfig hci0 down` (or `bluetoothctl power off`). This logically closes the HCI interface at the hardware boundary, guaranteeing zero wakeups without risking notoriously buggy SDIO driver unloads (`modprobe -r`).
137+
* **The RXNM Approach:** To establish a true logical air-gap and save power, we use the native `hciconfig` (e.g., `hciconfig hci0 down`). This logically closes the HCI interface at the hardware boundary, guaranteeing zero wakeups without risking notoriously buggy SDIO driver unloads (`modprobe -r`).
138138

139139
### 5.2. Inputs: The Proxy Trap (Explicitly Out-of-Scope)
140140

PLAN.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ RXNM 2.0 moves to a **Converged Engine** where the C Agent becomes the primary l
1313

1414
### Evolution Comparison
1515

16-
| Metric | 1.0 (Hybrid RC3) | OpenWrt (netifd) | 2.0 (Converged Mono) |
16+
| Metric | 1.1 (Hybrid) | OpenWrt (netifd) | 2.0 (Converged Mono) |
1717
| :--- | :--- | :--- | :--- |
1818
| **Logic Engine** | Bash / systemd-networkd | C / **ubus** / Shell Scripts | Monolithic C Engine |
1919
| **Connectivity** | `iwd` (D-Bus) | `hostapd` / `wpa_s` | Internalized `ell`/`iwd` Logic |
2020
| **Data Plane** | Kernel IP Stack | Kernel IP Stack / Bridge | **eBPF / XDP (Primary)** |
2121
| **IPC** | D-Bus (System/Lite) | **ubus** (libubox) | **Zero-IPC (Internal)** |
22-
| **Service Logic** | `ip netns` (Fork) | Flat Router Namespace | Native `setns` / BPF Maps |
22+
| **Service Logic** | Native `unshare`/`setns` (Agent) | Flat Router Namespace | Native `setns` / BPF Maps |
2323
| **CPU Wakeups (Idle)** | \~20-40 / sec | \~10-20 / sec | **< 2 / sec** |
24-
| **Resident RAM** | \~11.5MB | \~6.5MB | **\~2.5MB (Unified)** |
24+
| **Resident RAM** | \~7.7 MB | \~6.5MB | **\~2.5MB (Unified)** |
2525

2626
## 2. Core Architecture Pillars
2727

@@ -71,7 +71,7 @@ Comparison of the Monolithic 2.0 stack against standard `systemd-networkd` and O
7171

7272
| Metric | systemd-networkd | OpenWrt (netifd) | Micro-RXNM 2.0 (Mono) |
7373
| :--- | :--- | :--- | :--- |
74-
| **Resident RAM** | \~11.5 MB | \~6.5 MB | **\~2.5 MB** |
74+
| **Resident RAM** | \~7.7 MB (Total Stack) | \~6.5 MB | **\~2.5 MB** |
7575
| **Binary Footprint** | \~5.2 MB | \~1.2 MB | **\~0.9 MB** |
7676
| **Cold Start Latency** | \~450ms | \~250ms | **\~15ms** |
7777
| **USB/TB Hotplug** | \~180ms | \~80ms | **< 5ms** |
@@ -118,7 +118,7 @@ Comparison of the Monolithic 2.0 stack against standard `systemd-networkd` and O
118118

119119
## 7. Functionality Matrix: The 2.0 Standard
120120

121-
| Feature | RXNM 1.0 (Hybrid) | OpenWrt (netifd) | RXNM 2.0 (Mono) |
121+
| Feature | RXNM 1.1 (Hybrid) | OpenWrt (netifd) | RXNM 2.0 (Mono) |
122122
| :--- | :--- | :--- | :--- |
123123
| **Logic Engine** | systemd-networkd | C + Shell Scripts | **Internal C Logic** |
124124
| **WiFi Auth** | External `iwd` | External `wpa_s` | **Internal Module** |

README.md

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ How `rxnm` translates from traditional Linux networking tools.
118118
| **Set DHCP** | `rxnm interface eth0 set dhcp` | `nmcli con mod eth0 ipv4.method auto` | *(Automatic)* | `udhcpc -i eth0` |
119119
| **Set Static IP** | `rxnm interface eth0 set static IP/24` | `nmcli con mod eth0 ipv4.addresses IP/24` | `connmanctl config ... ipv4 manual ...` | `ip addr add IP/24 dev eth0` |
120120
| **Set Gateway** | `... set static ... --gateway GW` | `nmcli con mod eth0 ipv4.gateway GW` | *(As above)* | `ip route add default via GW` |
121-
| **Link Up/Down** | `rxnm interface eth0 enable/disable` | `nmcli device connect/disconnect eth0` | `connmanctl enable/disable ethernet` | `ip link set eth0 up/down` |
121+
| **L3 Deconfigure** | `rxnm interface eth0 disable` | `nmcli device disconnect eth0` | `connmanctl disable ethernet` | `ip addr flush dev eth0` |
122122
| **Internet Check** | `rxnm system check internet` | `nmcli networking connectivity` | *(None)* | `ping -c 1 8.8.8.8` |
123123
| **Power Silence** | `rxnm system nullify enable` | *(None)* | *(None)* | *(Requires custom XDP/eBPF code)* |
124124

@@ -199,7 +199,7 @@ rxnm wifi dpp enroll "DPP:C:81/1;M:001122334455;K:..."
199199
| `set dhcp` | Enable dynamic addressing |
200200
| `set static` | Configure fixed IP/Gateway/DNS |
201201
| `set hardware` | Adjust MAC, Speed, Duplex, or MTU |
202-
| `enable/disable` | Administrative UP/DOWN toggle |
202+
| `enable/disable` | Halts or initiates L3 configuration via networkd overrides |
203203

204204
**Examples:**
205205
```bash
@@ -237,7 +237,9 @@ rxnm system nullify enable --soft-wol yes
237237
rxnm system ipv6 disable
238238
```
239239

240-
### 4. Virtual Networking & VPN (`rxnm bridge|bond|vlan|vrf|vpn`)
240+
### 4. Virtual Networking, Namespaces & VPN
241+
242+
RXNM inherently supports deep integration with standard Linux overlay and containerization technologies.
241243

242244
**Examples:**
243245
```bash
@@ -249,6 +251,11 @@ rxnm bridge add-member eth0 --bridge br0
249251
rxnm vpn wireguard connect wg0 \
250252
--private-key "..." --peer-key "..." \
251253
--endpoint "vpn.host.com:51820" --address "10.0.0.2/24"
254+
255+
# Create an isolated Network Namespace (Requires RXNM_EXPERIMENTAL=true)
256+
RXNM_EXPERIMENTAL=true rxnm service create my_sandbox
257+
RXNM_EXPERIMENTAL=true rxnm service attach my_sandbox eth1
258+
RXNM_EXPERIMENTAL=true rxnm service exec my_sandbox ping 8.8.8.8
252259
```
253260

254261
## 🥗 User Stories & Cookbooks
@@ -285,6 +292,14 @@ echo '{"category":"wifi", "action":"connect", "ssid":"HomeNet", "password":"test
285292
### Integration Contract
286293
The [api-schema.json](https://codeberg.org/aenertia/rxnm/src/branch/main/api-schema.json) serves as the strict stability contract. It guarantees that frontend UI/C++ code won't break even if the underlying Linux kernel tools (like `iproute2` or `networkctl`) change their CLI output formatting. All structured output is strictly validated against this JSON schema.
287294

295+
## 🔢 Versioning System
296+
297+
RXNM follows strict [Semantic Versioning](https://semver.org/) (`MAJOR.MINOR.PATCH`) to ensure predictability for scripts, integrations, and downstream OS packagers.
298+
299+
* **Major (`X.0.0`):** Significant architectural shifts (e.g., the transition from the v1.x Hybrid Bash/C architecture to the planned v2.0 Monolithic C Engine) or breaking changes to the JSON API schema (`api-schema.json`) and CLI syntax.
300+
* **Minor (`1.X.0`):** Addition of new networking features (e.g., new `rxnm service` commands, overlay tunnels), substantial performance optimizations, or backwards-compatible API extensions.
301+
* **Bugfix Only (`1.1.X`):** Strictly limited to non-breaking bug fixes, security patches, upstream kernel mitigations (like adding new quirks for flaky SDIO WiFi drivers), and compatibility updates. No new features or API keys will be introduced in these releases.
302+
288303
## 📦 Deployment & Build Profiles
289304

290305
> **Security Note:** The native `rxnm-agent` C-accelerator requires `CAP_SYS_ADMIN` to perform namespace isolation and XDP/eBPF attachment. Ensure it runs as `root`, has capabilities set via `setcap cap_sys_admin+ep`, or uses `AmbientCapabilities=CAP_SYS_ADMIN` in its systemd unit.

0 commit comments

Comments
 (0)