Wifi connection troubles solved; why does my "fix" work?

15

2

I have a Samsung laptop, with Ubuntu 15.04 installed, upgraded all the way down from 13.10 but that's not the problem.

I have connected to countless wifi networks over time without trouble... That is, until a few days ago. I am temporarily working at a client's place and wasn't able to connect to any wifi networks at all. All networks were seen, I just couldn't establish a connection...

As no one else but me had trouble, I knew the problem was on my end.

My card is this:

02:00.0 Network controller: Intel Corporation Centrino Advanced-N 6235 (rev 24)

It uses the iwlwifi driver. And here is what modinfo reports as options:

parm:           swcrypto:using crypto in software (default 0 [hardware]) (int)
parm:           11n_disable:disable 11n functionality, bitmap: 1: full, 2: disable agg TX, 4: disable agg RX, 8 enable agg TX (uint)
parm:           amsdu_size_8K:enable 8K amsdu size (default 0) (int)
parm:           fw_restart:restart firmware in case of error (default true) (bool)
parm:           antenna_coupling:specify antenna coupling in dB (default: 0 dB) (int)
parm:           wd_disable:Disable stuck queue watchdog timer 0=system default, 1=disable (default: 1) (int)
parm:           nvm_file:NVM file name (charp)
parm:           uapsd_disable:disable U-APSD functionality (default: Y) (bool)
parm:           bt_coex_active:enable wifi/bt co-exist (default: enable) (bool)
parm:           led_mode:0=system default, 1=On(RF On)/Off(RF Off), 2=blinking, 3=Off (default: 0) (int)
parm:           power_save:enable WiFi power management (default: disable) (bool)
parm:           power_level:default power save level (range from 1 - 5, default: 1) (int)
parm:           fw_monitor:firmware monitor - to debug FW (default: false - needs lots of memory) (bool)

By a pure hunch, I modified the appropriate modprobe.d file to add:

options iwlwifi bt_coex_active=0

and all of a sudden I had no problems connecting anymore...

Why does this work? What does this option do?

fge

Posted 2015-06-06T08:31:01.240

Reputation: 573

Answers

15

Wifi connection troubles solved, why does my "fix" work?

When bt_coex_active is enabled it prevents bluetooth/wireless interference. When it is disabled it will allow increased bluetooth/wireless interference.

  • bt_coex_active=1 (true) prevents bluetooth/wireless interference.
  • bt_coex_active=0 (false) allows increased bluetooth/wireless interference.

The way the feature works is that when it is on, the wlan transceiver will avoid transmitting at the same time as the bluetooth transciever.

In some buggy implementations, it thinks the Bluetooth is transmitting all the time thus "muting" the WLAN completely, so turning it off will allow WLAN to work again.


802.11 Bluetooth coexistence

An 802.11 device and Bluetooth can interfere with each other when the 802.11 device operates on the 2.4 GHz band. All Bluetooth devices operate at the 2.4 GHz band. This section documents the technical details regarding the causes of interferences and solutions implemented in drivers, the 802.11 stack, and possible future enhancements.

...

Interference

Each 802.11 channel then equals to 20 Bluetooth channels. When communication is enabled on an Bluetooth device you will get interference when the Bluetooth device hops on to any of the 20 Bluetooth channels equivalent to your 802.11 channel. Even if a Bluetooth device hops at the max allowed frequency rate of 1600 frequency hops per second there are only 79 channels available so at this rate each channel will be used around 20 times in a second.

Source 802.11 Bluetooth coexistence


Source code extract:

/*
 * set bt_coex_active to true, uCode will do kill/defer
 * every time the priority line is asserted (BT is sending signals on the
 * priority line in the PCIx).
 * set bt_coex_active to false, uCode will ignore the BT activity and
 * perform the normal operation
 *
 * User might experience transmit issue on some platform due to WiFi/BT
 * co-exist problem. The possible behaviors are:
 *   Able to scan and finding all the available AP
 *   Not able to associate with any AP
 * On those platforms, WiFi communication can be restored by set
 * "bt_coex_active" module parameter to "false"
 *
 * default: bt_coex_active = true (BT_COEX_ENABLE)
 */

Source: iwl-core.c


Further reading

DavidPostill

Posted 2015-06-06T08:31:01.240

Reputation: 118 938

I'm confused when you say that a value of 0 will increase interference, because that's exactly what the wireless wiki on kernel.org suggests to do to solve the interference issue: https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi#about_iwldvm_support_and_known_issues; am I missing something?

– defvol – 2018-09-18T15:29:27.443

1@rodowi Read the paragraph starting "In some buggy implementations, " – DavidPostill – 2018-09-18T17:41:05.740