WiFi loses connectivity periodically wpa_supplicant reason 4
These are some issues I initially had with my Lenovo 100S with a Realtek 8821ae wifi adapter
I have been losing my wifi connection a lot lately with wpa_supplicant exiting with
wpa_supplicant: wlp2s0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx reason=4 locally_generated=1
along with other random disconnects. It became more and more frequent by the day to the point where the connection would be dropped after just seconds of connectivity.
I found a list of wpa_supplicant reason codes that claims reason 4 means Disassociated due to inactivity. The connection is certainly not idle when I lose my connectivity, so maybe some connectivity check is failing.
So I enabled debugging in NetworkManager by writing to
and followed along whenever I lost connectivity
journalctl -u NetworkManager -f.
Realtek network card
After a lot of digging, I found a post explaining that Realtek adapters are know for losing connectivity, which seemed like an instant match for my troubles. It also pointed in the direction of a GitHub repo containing sources of the latest updates to Realtek adapter drivers.
$ git clone https://github.com/lwfinger/rtlwifi-new ~/src/rtlwifi-new $ cd ~/src/rtlwifi-new
But when ready to run
make I did not have all the dependencies
$ make make -C /lib/modules/4.10.5-1-ARCH/build M=/home/noop/src/rtlwifi_new modules make: Entering directory '/usr/lib/modules/4.10.5-1-ARCH/build' make: *** No rule to make target 'modules'. Stop. make: Leaving directory '/usr/lib/modules/4.10.5-1-ARCH/build' make: *** [Makefile:58: all] Error 2
In my case, on Arch Linux 4.10.5, I needed the
# pacman -S linux-headers
Now it looks better
$: make -C /lib/modules/4.10.5-1-ARCH/build M=/home/noop/src/rtlwifi_new modules make: Entering directory '/usr/lib/modules/4.10.5-1-ARCH/build' Building modules, stage 2. MODPOST 15 modules make: Leaving directory '/usr/lib/modules/4.10.5-1-ARCH/build' Making backups Install rtlwifi SUCCESS
# make install
# modprobe rtl8821ae
And restart the machine
Connectivity still lags
The driver certainly fixed the connection drops, but now a different issue arised. At specific intervals I’m temporarily losing connectivity. The interfaces are still up and running, but I am getting random ping spikes of > 1000 ms in a time frame of about 10 seconds before returning to normal. During the spikes, the debug logs are giving me some valuable hints:
Mar 27 10:48:59 NetworkManager: <debug> [1490604539.7178] device[0xfa8c50] (wlp2s0): wifi-scan: scanning requested Mar 27 10:48:59 NetworkManager: <debug> [1490604539.7180] device[0xfa8c50] (wlp2s0): wifi-scan: no SSIDs to probe scan Mar 27 10:48:59 NetworkManager: <debug> [1490604539.7193] device[0xfa8c50] (wlp2s0): add_pending_action (1): 'wifi-scan' Mar 27 10:48:59 NetworkManager: <debug> [1490604539.7195] device[0xfa8c50] (wlp2s0): wifi-scan: scheduled in 120 seconds (interval now 120 seconds) Mar 27 10:48:59 NetworkManager: <debug> [1490604539.7592] device[0xfa8c50] (wlp2s0): wifi-scan: scanning-state: scanning Mar 27 10:49:07 NetworkManager: <debug> [1490604547.8645] ndisc-lndp[0x10fd0e0,"wlp2s0"]: processing libndp events Mar 27 10:49:08 NetworkManager: <debug> [1490604548.7870] ndisc-lndp[0x10fd0e0,"wlp2s0"]: processing libndp events Mar 27 10:49:10 NetworkManager: <debug> [1490604550.6191] ndisc-lndp[0x10fd0e0,"wlp2s0"]: processing libndp events Mar 27 10:49:13 NetworkManager: <debug> [1490604553.1484] device[0xfa8c50] (wlp2s0): wifi-scan: scan-done callback: successful
While debugging the previous issue, i stumbled upon an article talking about lost connections when wifi scanning was taking place, which seems to be closely related to the issues I’m having now. So I’ll bind the BSSID on the networks I’m having issues on, and hoping for the best
Other things I tried
Start from scratch
After changing laptop a while back, I used unedited connection profiles from
This may have been causing issues with invalid connection UIDS and device hardware addresses.
I just deleted all my connections and I’m re-creating them from scratch.
It did not make a difference at first, but may be an important factor later on.
Verify that NetworkManager connectivity check works
Then I run
journalctl -u NetworkManager -f before restarting NetworkManager with
systemctl restart NetworkManager and start watching the logs. The first thing I see is what configuration files are being read:
<info> [1490522215.5734] Read config: /etc/NetworkManager/NetworkManager.conf (lib: 20-connectivity.conf) (etc: 00-defaults.conf, 10-powersaving.conf
I know the settings of defaults and powersaving, but the
lib: 20-connectivity.conf seems interesting.
/usr/lib/NetworkManager/conf.d/20-connectivity.conf contains the following:
But later I find the logs says its fine:
NetworkManager: <debug> [1490522524.6651] connectivity: check: send periodic request to 'http://www.archlinux.org/check_network_status.txt' NetworkManager: <debug> [1490522524.7821] connectivity: check for uri 'http://www.archlinux.org/check_network_status.txt' successful.
… which I can confirm by reading the CONNECTIVITY SECTION of
$ curl http://www.archlinux.org/check_network_status.txt NetworkManager is online
For those interested, I have set up my own connectivity check endpoint.