Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Network Service (NetworkManager/IWD)

The network service (src/services/network/) manages WiFi connections and VPN, supporting two backends: NetworkManager and IWD.

Structure

services/network/
├── mod.rs       # Service implementation, backend abstraction
├── dbus.rs      # NetworkManager D-Bus proxy definitions
└── iwd_dbus/    # IWD D-Bus proxy definitions (extensive)
    ├── mod.rs
    ├── station.rs
    ├── network.rs
    ├── known_network.rs
    ├── device.rs
    └── ...

Dual Backend

The network service supports two backends:

  • NetworkManager: The traditional Linux network management daemon. Used on most distributions.
  • IWD (iNet Wireless Daemon): Intel’s lightweight wireless daemon. Used on some minimal setups and can be used as a backend for NetworkManager.

The backend is detected based on which D-Bus service is available.

Capabilities

  • List available WiFi networks
  • Connect/disconnect from WiFi networks
  • WiFi network scanning
  • VPN connection management
  • Connection state monitoring
  • Signal strength display

Known Challenges

The network service is the most problematic service in the codebase (see GitHub Issue #445):

  • WiFi scanning reliability: Scan results can be stale or incomplete depending on the backend.
  • Architectural differences: NetworkManager and IWD have fundamentally different D-Bus APIs and event models, making a unified abstraction difficult.
  • Connection state tracking: Race conditions can occur between connection state changes and UI updates.

This is an active area of refactoring.

IWD D-Bus Bindings

The IWD integration includes a comprehensive set of D-Bus proxy definitions — one of the most extensive in the project. This covers:

InterfacePurpose
net.connman.iwd.StationWiFi station management
net.connman.iwd.NetworkNetwork connection control
net.connman.iwd.KnownNetworkSaved network management
net.connman.iwd.DeviceWireless device control
net.connman.iwd.AdapterPhysical adapter properties