·
31 commits
to master
since this release
nmrs 3.0.0
Published to crates.io.
nmrs 3.0 is a major expansion of the core library: OpenVPN support, broader VPN enumeration, per-interface Wi-Fi APIs, saved profile management, AP/BSSID detail, connectivity reporting, airplane mode, and a NetworkManager secret agent surface.
See CHANGELOG.md for the full technical changelog.
Highlights
- Added NetworkManager secret agent support for credential prompts over D-Bus.
- Added OpenVPN support, including builders,
.ovpnimport, inline certificate storage, auth handling, TLS hardening, compression, proxy, routing, and resilience options. - Added generic VPN enumeration for NetworkManager VPN plugins, including OpenVPN, OpenConnect, strongSwan, PPTP, L2TP, WireGuard, and a generic fallback.
- Added UUID/name-based activation and UUID-based disconnect for saved VPN profiles.
- Added per-interface Wi-Fi scoping for multi-radio systems via
WifiScope,list_wifi_devices(), and interface-aware scan/connect/disconnect APIs. - Added per-BSSID access point enumeration, security flag decoding, and
connect_to_bssid. - Added saved connection enumeration and management through NetworkManager Settings / Settings.Connection D-Bus APIs.
- Added connectivity state reporting,
check_connectivity(),connectivity_report(), and captive-portal URL detection. - Added airplane-mode helpers across Wi-Fi, WWAN, Bluetooth, and rfkill hardware state.
- Improved builder ergonomics by returning
Resultinstead of panicking on missing required fields. - Updated mdbook docs, README examples, and migration guidance for the 3.0 API.
Migration Notes
Most Wi-Fi methods now accept an optional interface argument. Pass None to preserve the old “any Wi-Fi device” behavior:
nm.list_networks(None).await?;
nm.scan_networks(None).await?;
nm.connect("MyNetwork", None, WifiSecurity::Open).await?;
nm.disconnect(None).await?;Use WifiScope for per-device operations:
let wlan0 = nm.wifi("wlan0");
wlan0.scan().await?;
wlan0.connect("MyNetwork", WifiSecurity::Open).await?;Other notable API changes:
set_wifi_enabled(bool)is now split into globalset_wireless_enabled(bool)and per-interfaceset_wifi_enabled(interface, bool).wifi_enabled()/wifi_hardware_enabled()are replaced bywifi_state().list_saved_connections()now returnsVec<SavedConnection>; uselist_saved_connection_ids()for the old name-list behavior.VpnTypeis now a rich metadata enum; the old tag-style role isVpnKind.VpnConfig::vpn_type()is nowvpn_kind().VpnConnectionInfo.vpn_typeis nowvpn_kind.VpnCredentialsBuilder::build()andEapOptionsBuilder::build()now returnResult.
What's Changed
Core 3.0 Features
- NetworkManager secret agent API by @cachebag in #370
- Airplane-mode surface and rfkill awareness by @cachebag in #372
- Per-BSSID access points, security decoding, and
connect_to_bssidby @cachebag in #373 - Per-interface Wi-Fi scoping for multi-radio systems by @cachebag in #375
- Saved connection enumeration through Settings / Settings.Connection proxies by @cachebag in #376
- Connectivity state and captive-portal URL surface by @cachebag in #377
- Generic VPN support with rich enumeration and UUID-based activation by @cachebag in #378
OpenVPN and VPN Work
VpnConfigtrait andconnect_vpnrefactor by @cachebag in #303- OpenVPN connection settings model expansion by @Dandiggas in #309
- Multi-VPN plumbing by @stoutes in #311
.ovpnlexer and parser by @cachebag in #314- OpenVPN compression and proxy support by @stoutes in #315
.ovpnparser tests and refactors by @cachebag in #316- Inline certificate storage for
.ovpnprofiles by @cachebag in #323 - OpenVPN builder with validation by @stoutes in #326
- Use
zvariant::Dictforvpn.dataandvpn.secretsD-Bus types by @cachebag in #337 - Parse
auth-user-passand infer OpenVPN auth type by @cachebag in #340 - Fix OpenVPN gateway extraction from
vpn.databy @cachebag in #344 - OpenVPN input validation by @cachebag in #345
- OpenVPN TLS hardening options by @cachebag in #346
NetworkManager::import_ovpn()andOpenVpnBuilder::from_ovpn_file()by @cachebag in #347VpnDetailsenum onVpnConnectionInfoby @cachebag in #348- OpenVPN routing, resilience, and NCP options by @cachebag in #349
Fixes and Polish
- Support selecting Bluetooth adapters in
BluetoothIdentityby @cachebag in #267 - Fill active Wi-Fi network device/IP fields by @cachebag in #368
- Fire network monitor callbacks on AP signal strength changes by @cachebag in #367
- Add
Sendbound to monitoring stream trait objects by @cachebag in #359 - Return
ResultfromVpnCredentialsandEapOptionsbuilders by @cachebag in #379 - Propagate disconnect errors and narrow Wi-Fi pre-connect teardown by @cachebag in #379
- Add missing public API annotations by @cachebag in #379
- Update mdbook for 3.0 per-interface Wi-Fi API and OpenVPN docs by @cachebag in #379
Maintenance
Contributors
Thank you to everyone who contributed code, docs, review, testing, bug reports, and release feedback for this cycle.
- @cachebag
- @stoutes
- @pluiee
- @JonnieCache
- @tristanmsct
- @Rifat-R
- @of-the-stars
- @okhsunrog
- @ruthwik-01
- @joncorv
- @AK78gz
- @pwsandoval
- @ritiek
- @shubhsingh5901
- @cinnamonstic
- @tuned-willow
Full Changelog: nmrs-v2.4.0...nmrs-v3.0.0