network: replace connman with rxnm, delegate IWD to L2-only#2369
Open
aenertia wants to merge 1 commit intoROCKNIX:nextfrom
Open
network: replace connman with rxnm, delegate IWD to L2-only#2369aenertia wants to merge 1 commit intoROCKNIX:nextfrom
aenertia wants to merge 1 commit intoROCKNIX:nextfrom
Conversation
aenertia
commented
Mar 6, 2026
| Description=Wireless service | ||
| Documentation=man:iwd(8) man:iwd.config(5) man:iwd.network(5) man:iwd.ap(5) | ||
| After=network-pre.target | ||
| After=network-pre.target dbus.service |
Contributor
Author
There was a problem hiding this comment.
This actually fixes a bug in current unit - which can trigger cycle issues in some situations
aenertia
commented
Mar 6, 2026
| [Install] | ||
| WantedBy=multi-user.target | ||
| SVCEOF | ||
|
|
Contributor
Author
There was a problem hiding this comment.
I thought it best to keep this in-line within the package to simplify install. Am happy to move this separately
aenertia
commented
Mar 6, 2026
| # Bash completion | ||
| mkdir -p ${INSTALL}/usr/share/bash-completion/completions | ||
| cp ${PKG_BUILD}/usr/share/bash-completion/completions/rxnm ${INSTALL}/usr/share/bash-completion/completions/ | ||
|
|
Contributor
Author
There was a problem hiding this comment.
It works fine without the bash completion. But it's much nicer with it.
aenertia
commented
Mar 6, 2026
| safe_remove ${INSTALL}/usr/lib/systemd/systemd-networkd-wait-online | ||
| safe_remove ${INSTALL}/usr/lib/systemd/system/systemd-networkd-wait-online.service | ||
| safe_remove ${INSTALL}/usr/lib/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service | ||
|
|
Contributor
Author
There was a problem hiding this comment.
Belt and suspenders approach needed here since we are no-longer using a top-level glob
Replace ConnMan with rxnm v1.1.1 and systemd-networkd for network management: - rxnm handles L3 operations (DHCP, routing) via systemd-networkd - IWD operates in L2-only mode for WiFi authentication - networkd templates auto-configure all interface types - Eliminates ConnMan's 7MB daemon and dependencies (glib, ncurses, readline) rxnm.service extracted to system.d/ directory following ROCKNIX packaging convention. TimeoutStopSec=1s added to rxnm.service and systemd-networkd (via drop-in override) to align with systemd aggressive shutdown policy. Validated: RK3566 across multiple boot cycles (WiFi WPA3, USB hotplug, AP mode, routing, DNS via systemd-resolved). make world passes all targets.
304bcf7 to
d6ff4b3
Compare
Contributor
Author
|
Nothing rxnm code related - just some packaging tweaks.
|
Contributor
Author
|
CI kicked off here: https://github.com/aenertia/distribution/actions/runs/22872072072 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replace ConnMan with rxnm v1.1.1 + systemd-networkd as the network management stack. This is a minimal introduction for full replacement — all user and low-level networking functionality works exactly as it does pre-rxnm (and in several cases, better).
rxnm delegates L3 (DHCP, addressing, routing) to systemd-networkd and keeps IWD in L2-only mode for WiFi authentication. Standard networkd .network templates handle all interface types — WiFi station, ethernet, USB gadget, Bluetooth PAN, AP/hotspot — automatically via template matching, without user interaction. Zero-touch unless the user wants to customize, in which case it is standard networkd config overrides.
This eliminates ConnMan's 7MB daemon and glib/ncurses/readline deps, replacing them with ~150KB of shell libraries and a 50KB native C agent. Measured on RK3566 hardware: 7.8 MiB RSS saved, 5 MiB less system memory used, 23 fewer CPU jiffies at idle — lighter across every dimension.
Changes:
Hardware validated on RK3566 across multiple boot cycles: WiFi station (WPA3), USB ethernet hotplug, local-play AP mode, dual-homed routing, profile save/load, DNS via systemd-resolved, nullify enable/disable. EmulationStation WiFi UI works unchanged — no ES modifications needed.
make world passes for all 9 targets (RK3588, RK3566, RK3326, RK3399, S922X, SM8250, SM8550, H700, SM8650).
Note: XDP/eBPF kernel module support for nullify power management modes will come in a separate patchset. This change focuses solely on the ConnMan-to-rxnm network stack replacement.
rxnm upstream: https://codeberg.org/aenertia/rxnm (v1.1.1 tagged) CI: https://github.com/aenertia/rxnm/actions (unit, POSIX, shellcheck,
wired/bridge integration, virtual WiFi hwsim, bundle interop)
Extensive benchmarks and docs at the codeburg.
Rocknix CI kicked off and building here : https://github.com/aenertia/distribution/actions/runs/22613457258