You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -177,4 +177,10 @@ While RXNM is optimized for high-performance embedded scenarios, its design phil
177
177
178
178
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.
179
179
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!*
Copy file name to clipboardExpand all lines: BUILD.md
+30-3Lines changed: 30 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -48,7 +48,7 @@ Several critical paths have specific fallbacks when preferred tools are absent.
48
48
49
49
## 🚀 Build Profiles
50
50
51
-
RXNM provides three primary compilation targets depending on your deployment constraints.
51
+
RXNM provides four primary compilation targets depending on your deployment constraints.
52
52
53
53
### 1. The Standard Build (Dynamic Linking)
54
54
@@ -58,6 +58,7 @@ Best for desktop development, debugging, or standard glibc-based distributions (
58
58
make
59
59
sudo make install
60
60
61
+
61
62
```
62
63
63
64
***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.
72
73
make tiny
73
74
sudo make install
74
75
76
+
75
77
```
76
78
77
79
***Result:** Statically linked `rxnm-agent`.
@@ -89,6 +91,7 @@ This target triggers `scripts/bundle.sh` to forcefully strip out enterprise netw
89
91
```
90
92
make rocknix-release
91
93
94
+
92
95
```
93
96
94
97
***Result:** Outputs exactly two files to the `build/` directory:
@@ -99,6 +102,17 @@ make rocknix-release
99
102
100
103
***Validation:** Automatically runs a dedicated bundle fuzzer to ensure the script amalgamation did not introduce syntax errors.
101
104
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
+
102
116
## 🔀 Architecture: Dual Execution Paths (Bash vs. POSIX)
103
117
104
118
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.
***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
+
176
196
***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.
177
197
178
198
***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
181
201
182
202
***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).
183
203
204
+
***Verification (`verify_release.sh`):** End-to-end integration checks for Service Namespaces (`CLONE_NEWNET`), experimental stub correctness, and pure bash degradation handling.
205
+
184
206
### Interoperability Tests (Systemd-Nspawn)
185
207
186
208
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.
# Test the flat-file ROCKNIX minimal bundle architecture
193
215
sudo ./tests/integration/run_rocknix_interop.sh
194
216
217
+
195
218
```
196
219
197
220
## 📂 Installation Paths
198
221
199
222
`make install` deploys files to standard system paths compliant with FHS and systemd conventions.
200
223
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`.
202
225
203
226
**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/`.
|**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`.*|
215
238
216
239
To override the installation prefix (default `/usr`):
217
240
218
241
```
219
242
make install PREFIX=/usr/local
220
243
244
+
221
245
```
222
246
223
247
## ⚔️ Cross-Compilation
@@ -230,6 +254,7 @@ RXNM's zero-dependency design makes it trivial to cross-compile for target embed
230
254
export CC=aarch64-linux-gnu-gcc
231
255
make tiny
232
256
257
+
233
258
```
234
259
235
260
### Cross-Compiling for RISC-V
@@ -238,6 +263,7 @@ make tiny
238
263
export CC=riscv64-linux-gnu-gcc
239
264
make tiny
240
265
266
+
241
267
```
242
268
243
269
## 🧹 Cleaning Up
@@ -247,4 +273,5 @@ To remove build artifacts, object files, generated headers, and temporary build
Copy file name to clipboardExpand all lines: NULLIFY.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -134,7 +134,7 @@ This creates a targeted "Logical Kill-Switch." In this scenario, the physical Wi
134
134
135
135
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.
136
136
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`).
138
138
139
139
### 5.2. Inputs: The Proxy Trap (Explicitly Out-of-Scope)
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.
287
294
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
+
288
303
## 📦 Deployment & Build Profiles
289
304
290
305
> **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