I have a ThinkPad T420, which comes with an Intel Corporation Centrino Ultimate-N 6300 wireless adapter. The card is recognised out of the box, and it connects to my home WiFi. There are two kernel modules loaded:
iwlwifi. Typically, after a minute or two the internet connection becomes so slow that it is virtually lost. I am running Slackware64 14.2 with kernel 4.4.217. It seems I finally found a solution in the Ubuntu forums.
Long story short, I created two kernel module configurations files in
/etc/modprobe.d/ with the following contents:
options iwlmvm power_scheme=1
options iwlwifi bt_coex_active=N swcrypto=1 11n_disable=1
Rebooted and the wireless works fine!
Now the details.
It seems the problem was in the WiFi speed. I will quote the explanations of varunendra (thank you!) from the Ubuntu forum:
power_scheme=1: Applicable to the “iwlmvm” driver; sets the power management scheme to “1”, which is for “active” scheme as per its modinfo. The other two possible values are 2 (balanced) and 3 (low power). 2 was the default, we changed it to 1 (active).
bt_coex_active=N: Applicable to the “iwlwifi” driver; disables a ‘Feature’ that allows co-existence of bluetooth and wifi signals. The bluetooth signals operate within the same frequency range as wifi (2.4 GHz), and so may cause mutual interference when both are used simultaneously. This technology (bt-coexistence) modifies the transmission/reception of wifi in such a way that is supposed to avoid this kind of interference. Unfortunately, it doesn’t always work as expected and sometimes causes more trouble than helping anything. In such cases, turning it off with above parameter helps.
swcrypto=1: Applicable to the “iwlwifi” driver; shifts the task of packet encryption from hardware (wireless chip) to software (driver/OS). Helps when the hardware encryption can’t keep up with the packet encryption for some reason (too fast traffic, inefficient encryption algorithm etc.).
11n_disable=1: Applicable to the “iwlwifi” driver; disables N-channel, which means trading speed for stability by limiting yourself to g-speeds (54 Mbps max).
In my case, it seems that
option 11n_disable=1 was critical. The internet worked even without creating the
iwlmvm.conf file. As explained in the excellent original post, we can use the
modinfo command to see the available options for a driver, as well as other info, like this:
Or use the
-p option, to see only available parameters:
modinfo -p iwlwifi
The above command gives the following list:
swcrypto:using crypto in software (default 0 [hardware]) (int) 11n_disable:disable 11n functionality, bitmap: 1: full, 2: disable agg TX, 4: disable agg RX, 8 enable agg TX (uint) amsdu_size_8K:enable 8K amsdu size (default 0) (int) fw_restart:restart firmware in case of error (default true) (bool) antenna_coupling:specify antenna coupling in dB (default: 0 dB) (int) nvm_file:NVM file name (charp) d0i3_disable:disable d0i3 functionality (default: Y) (bool) lar_disable:disable LAR functionality (default: N) (bool) uapsd_disable:disable U-APSD functionality (default: Y) (bool) bt_coex_active:enable wifi/bt co-exist (default: enable) (bool) led_mode:0=system default, 1=On(RF On)/Off(RF Off), 2=blinking, 3=Off (default: 0) (int) power_save:enable WiFi power management (default: disable) (bool) power_level:default power save level (range from 1 - 5, default: 1) (int) fw_monitor:firmware monitor - to debug FW (default: false - needs lots of memory) (bool)
11n_disable=2 and the networked did not work. I can spend some time to play with the settings and find out which ones are absolutely necessary and which ones can be omitted. However, considering that I had been struggling with this problem for a month, and that it took me 5 hours yesterday to find the solution, I will give it a rest for a while. The speed is limited to 54 Mb/s, which is still much better than no internet at all.
PS: About the laptop. I changed my Dell Latitude E6400 to this one about a month ago.