On Mon, 2021-03-01 at 10:54 -0500, Steve Newcomb wrote: > I have 2 hosts that experience interruptions in their > NetworkManager-managed wifi connections. > > In an attempt to force the hosts to restore their wifi connections > more promptly than they otherwise would, I have them running a cron > job called "keepWirelessAlive.py" every 3 minutes. If wifi is > running, the job does nothing. If not, it attempts to restore the > connection using nmcli: > > nmcli device connect wlp3s0
`man nmcli` says about `nmcli device connect`:
Connect the device. NetworkManager will try to find a suitable
connection that will be activated. It will also consider
connections that are not set to auto connect.
If no compatible connection exists, a new profile with default
settings will be created and activated. This differentiates nmcli
connection up ifname "$DEVICE" from nmcli device connect "$DEVICE"
The case where nmcli finds a suitable existing profile and connects it
is clear. But if the SSID for that profile is not in range, no suitable
profile is found and NetworkManager is told to create a new profile.
`nmcli device connect` does that by providing an incomplete profile,
that NetworkManager completes. However, `nmcli device connect` does not
work in that case, because you would at least need to specify the SSID.
Thus, creating a profile with `nmcli device connect` does not work.
Instead, it would work with `nmcli device connect wifi ssid ...`.
It sounds like you don't want to use `nmcli device connect`. Use `nmcli
connection up "$PROFILE"` or even `nmcli connection profile "$PROFIILE"
ifname "$IFACE"`.
If you really don't want to select the profile yourself, and let
NetworkManager choose one, maybe you need to first ensure that the Wi-
Fi scan list is up to date. That is, issue a `nmcli device wifi rescan`
before `nmcli device connect`.
But anyway, sometimes connecting to a Wi-Fi may fail. For example, when
the SSID cannot be found. It may simply happen sometimes. Ignore the
error and retry after a while.
If you want to understand why any of that happens, enable level=TRACE
log ([1]) in NetworkManager and debug logging for supplicant.
[1]
https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/contrib/fedora/rpm/NetworkManager.conf#n28
Also, I would try to solve those interruptions, instead of adding a
cron job like this... again, the (trace/debug) logfile is the way to
go.
best,
Thomas
>
> (see below). The command works fine in tests, but when such an attempt
> is made automatically by the cron job, it fails, and NetworkManager's
> log
> messages explain that I've failed to specify a 'wireless' setting (see
> below). Alas, I can't find a 'wireless' setting anywhere in
> NetworkManager's documentation, so I suspect the log message could be
> clearer.
>
> Everything is OK:
>
> Mar 1 00:18:01 carp CRON[2615]: (root) CMD
> (/usr/local/ch-tools3/keepWirelessAlive.py)
> Mar 1 00:21:01 carp CRON[2740]: (root) CMD
> (/usr/local/ch-tools3/keepWirelessAlive.py)
>
> But then the connection is lost:
>
> Mar 1 00:23:36 carp NetworkManager[657]: <warn> [1614576216.8719]
> sup-iface[0x557adf36a8d0,wlp3s0]: connection disconnected (reason -4)
> Mar 1 00:23:36 carp NetworkManager[657]: <info> [1614576216.8993]
> device (wlp3s0): supplicant interface state: completed -> disconnected
> Mar 1 00:23:36 carp NetworkManager[657]: <info> [1614576216.9775]
> device (wlp3s0): supplicant interface state: disconnected -> scanning
> Mar 1 00:23:40 carp NetworkManager[657]: <info> [1614576220.2651]
> device (wlp3s0): supplicant interface state: scanning -> authenticating
> Mar 1 00:23:40 carp NetworkManager[657]: <info> [1614576220.3809]
> device (wlp3s0): supplicant interface state: authenticating ->
> disconnected
> Mar 1 00:23:40 carp NetworkManager[657]: <info> [1614576220.8807]
> device (wlp3s0): supplicant interface state: disconnected -> scanning
> Mar 1 00:23:52 carp NetworkManager[657]: <warn> [1614576232.5545]
> device (wlp3s0): link timed out.
> Mar 1 00:23:52 carp NetworkManager[657]: <info> [1614576232.5567]
> device (wlp3s0): state change: activated -> failed (reason
> 'ssid-not-found', sys-iface-state: 'managed')
> Mar 1 00:23:52 carp NetworkManager[657]: <info> [1614576232.5667]
> manager: NetworkManager state is now DISCONNECTED
> Mar 1 00:23:53 carp NetworkManager[657]: <warn> [1614576233.5961]
> device (wlp3s0): Activation: failed for connection 'XXXXXXXXX'
> Mar 1 00:23:53 carp NetworkManager[657]: <info> [1614576233.5997]
> device (wlp3s0): state change: failed -> disconnected (reason 'none',
> sys-iface-state: 'managed')
> Mar 1 00:23:53 carp dbus-daemon[655]: [system] Activating via systemd:
> service name='org.freedesktop.nm_dispatcher'
> unit='dbus-org.freedesktop.nm-dispatcher.service' requested by ':1.13'
> (uid=0 pid=657 comm="/usr/sbin/NetworkManager --no-daemon ")
> Mar 1 00:23:53 carp NetworkManager[657]: <info> [1614576233.6407]
> dhcp4
> (wlp3s0): canceled DHCP transaction, DHCP client pid 7824
> Mar 1 00:23:53 carp NetworkManager[657]: <info> [1614576233.6407]
> dhcp4
> (wlp3s0): state changed bound -> done
> Mar 1 00:23:53 carp NetworkManager[657]: <info> [1614576233.6571]
> device (wlp3s0): set-hw-addr: set MAC address to 5E:75:AF:F6:6C:E0
> (scanning)
> Mar 1 00:23:54 carp NetworkManager[657]: <info> [1614576234.0453]
> dns-mgr: Removing DNS information from /sbin/resolvconf
> Mar 1 00:23:54 carp NetworkManager[657]: <info> [1614576234.6754]
> device (wlp3s0): supplicant interface state: scanning -> disabled
> Mar 1 00:23:54 carp NetworkManager[657]: <info> [1614576234.6755]
> device (wlp3s0): supplicant interface state: disabled -> inactive
>
> So when the keepWirelessAlive.py cron job tries (repeatedly) to bring
> the interface back online:
>
> Mar 1 00:24:01 carp CRON[3023]: (root) CMD
> (/usr/local/ch-tools3/keepWirelessAlive.py)
> Mar 1 00:24:01 carp NetworkManager[657]: <info> [1614576241.2585]
> agent-manager: req[0x557adf45f810, :1.1154236/nmcli-connect/0]: agent
> registered
> Mar 1 00:24:01 carp NetworkManager[657]: <info> [1614576241.2871]
> audit: op="connection-add-activate" pid=3053 uid=0 result="fail"
> reason="A 'wireless' setting is required if no AP path was given."
> Mar 1 00:24:01 carp /keepWirelessAlive.py: nmcli device connect wlp3s0
> 4 Error: Failed to add/activate new connection: A 'wireless' setting
> is
> required if no AP path was given.
> Mar 1 00:24:04 carp systemd[1]: NetworkManager-dispatcher.service:
> Succeeded.
> Mar 1 00:27:01 carp CRON[4852]: (root) CMD
> (/usr/local/ch-tools3/keepWirelessAlive.py)
> Mar 1 00:27:02 carp NetworkManager[657]: <info> [1614576422.0156]
> agent-manager: req[0x557adf45f8a0, :1.1154256/nmcli-connect/0]: agent
> registered
> Mar 1 00:27:02 carp NetworkManager[657]: <info> [1614576422.0184]
> audit: op="connection-add-activate" pid=4868 uid=0 result="fail"
> reason="A 'wireless' setting is required if no AP path was given."
> Mar 1 00:27:02 carp /keepWirelessAlive.py: nmcli device connect wlp3s0
> 4 Error: Failed to add/activate new connection: A 'wireless' setting
> is
> required if no AP path was given.
> Mar 1 00:29:35 carp NetworkManager[657]: <info> [1614576575.6162]
> device (wlp3s0): set-hw-addr: set MAC address to 9E:33:C8:6D:BC:33
> (scanning)
> Mar 1 00:29:36 carp NetworkManager[657]: <info> [1614576576.0081]
> device (wlp3s0): supplicant interface state: inactive -> disabled
> Mar 1 00:29:36 carp NetworkManager[657]: <info> [1614576576.0163]
> device (wlp3s0): supplicant interface state: disabled -> inactive
> Mar 1 00:30:01 carp CRON[5036]: (root) CMD
> (/usr/local/ch-tools3/keepWirelessAlive.py)
>
> ...etc.
>
> _______________________________________________
> networkmanager-list mailing list
> [email protected]
> https://mail.gnome.org/mailman/listinfo/networkmanager-list
signature.asc
Description: This is a digitally signed message part
_______________________________________________ networkmanager-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/networkmanager-list
