iwd backend: nmcli wifi connect requires connecting via iwctl first
Context
Hi, I'm trying to add iwd as a backend to NetworkManager in freedesktop-sdk.
I'm having an issue where I can only connect to WiFi networks using nmcli if they have already been connected to via iwctl first.
I'm testing on a Raspberry Pi 4.
Steps to reproduce
Trying to connect to a WiFi network I have never connected to before results in an error and NetworkManager reverts back to unconnected or the last successful connection:
-bash-5.0# nmcli device wifi connect "I'm Brian and so is my WiFi"
Error: Connection activation failed: (10) 802.1X supplicant failed.
# The journal reports:
-bash-5.0# SYSTEMD_PAGER= journalctl -eu NetworkManager
[snip]
May 12 16:12:06 linux NetworkManager[214]: <error> [1589299926.7689] device (wlan0): Activation: (wifi) Network.Connect failed: GDBus.Error:net.connman.iwd.NoAgent: No Agent registered
[snip]
# Even though the iwd appears to be on dbus
-bash-5.0# busctl | grep iwd
:1.5 212 iwd root :1.5 iwd.service - -
net.connman.iwd 212 iwd root :1.5 iwd.service - -
More from the journal
-bash-5.0# SYSTEMD_PAGER= journalctl -eu NetworkManager
May 12 16:11:28 linux NetworkManager[214]: <info> [1589299888.4586] dhcp6 (wlan0): activation: beginning transaction (timeout in 45 seconds)
May 12 16:11:28 linux NetworkManager[214]: <info> [1589299888.4705] dhcp6 (wlan0): option dhcp6_name_servers => 'fe80::1'
May 12 16:11:28 linux NetworkManager[214]: <info> [1589299888.4707] dhcp6 (wlan0): state changed unknown -> bound
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.6270] audit: op="connection-update" uuid="38475bb4-1941-48be-8e51-faaa5ce43bce" name="I'm Brian and so is my WiFi" pid=390 uid=0 result="success"
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.6342] device (wlan0): disconnecting for new activation request.
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.6344] device (wlan0): state change: activated -> deactivating (reason 'new-activation', sys-iface-state: 'managed')
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.6380] manager: NetworkManager state is now DISCONNECTING
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.6494] audit: op="connection-activate" uuid="38475bb4-1941-48be-8e51-faaa5ce43bce" name="I'm Brian and so is my WiFi" pid=390 uid=0 result="success"
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7041] device (wlan0): new IWD device state is disconnecting
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7092] device (wlan0): new IWD device state is disconnected
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7124] device (wlan0): state change: deactivating -> disconnected (reason 'new-activation', sys-iface-state: 'managed')
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7164] dhcp4 (wlan0): canceled DHCP transaction
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7165] dhcp4 (wlan0): state changed bound -> done
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7183] dhcp6 (wlan0): canceled DHCP transaction
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7185] dhcp6 (wlan0): state changed bound -> done
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7376] manager: NetworkManager state is now DISCONNECTED
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7395] policy: set-hostname: set hostname to 'localhost.localdomain' (no default device)
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7399] device (wlan0): Activation: starting connection 'I'm Brian and so is my WiFi' (38475bb4-1941-48be-8e51-faaa5ce43bce)
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7479] device (wlan0): state change: disconnected -> prepare (reason 'none', sys-iface-state: 'managed')
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7497] manager: NetworkManager state is now CONNECTING
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7517] device (wlan0): state change: prepare -> config (reason 'none', sys-iface-state: 'managed')
May 12 16:12:06 linux NetworkManager[214]: <error> [1589299926.7689] device (wlan0): Activation: (wifi) Network.Connect failed: GDBus.Error:net.connman.iwd.NoAgent: No Agent registered
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7703] device (wlan0): state change: config -> failed (reason 'supplicant-failed', sys-iface-state: 'managed')
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7727] manager: NetworkManager state is now DISCONNECTED
May 12 16:12:06 linux NetworkManager[214]: <warn> [1589299926.7787] device (wlan0): Activation: failed for connection 'I'm Brian and so is my WiFi'
May 12 16:12:06 linux NetworkManager[214]: <info> [1589299926.7800] device (wlan0): state change: failed -> disconnected (reason 'none', sys-iface-state: 'managed')
If I connect to another network via iwctl first, then nmcli works fine:
-bash-5.0# iwctl station wlan0 connect "Big Kahuna Burger"
-bash-5.0# nmcli device wifi connect "Big Kahuna Burger"
Is this the intended behaviour or should NetworkManger handle the connection. I don't understand enough about dbus to interpret the error:
- Network.Connect failed: GDBus.Error:net.connman.iwd.NoAgent: No Agent registered
Does iwd register some other "agent" when it connects to a network? Any help would be appreciated. Thank you.
Acceptance criteria
I can connect to WPA/WPA2 secured WiFi networks via nmcli, without having to use iwctl.