Bug 12772 - wpa_supplicant не работает на уже ассоциированном интерфейсе
Summary: wpa_supplicant не работает на уже ассоциированном интерфейсе
Status: CLOSED FIXED
Alias: None
Product: Branch 4.0
Classification: Distributions
Component: wpa_supplicant (show other bugs)
Version: 4.0
Hardware: all Linux
: P2 critical
Assignee: inger@altlinux.org
QA Contact: Q.A. 4.0
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-09-14 02:59 MSD by Anton Farygin
Modified: 2011-09-10 11:13 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Farygin 2007-09-14 02:59:20 MSD
Если интерфейс предварительно ассоциировать с точкой доступа через
wireless-tools, то wpa_supplicant перестаёт работать.

Пример:
настраиваем карту через iwconfig eth1 essid myessid key 0x12121212

После этого пытаемся перенастроить плату с помощью alterator-net-wifi на WEP.
Получаем странное - идёт коннект, после этого сразу - дисконнект. Это зависит от
ядерного драйвера, и воспроизводится железно на ipw3945.

Проблема в том, что если интерфейс уже ассоциирован с точкой доступа, то драйвер
не отправляет SIOCGIWAP (в общем то он прав), и wpa_supplicant никогда не
получает сигнал о том, что подсоединение к точке доступа прошло успешно. И
соответственно процедура аутентификации обламывается по таймауту (хотя во время
таймаута сеть работает), после таймаута идёт повторная процедура и так до
бесконечности.

Мне показалось правильным способом исправить данную проблему - перед началом
аутентификации на точке доступа сбросить ассоциацию, что в общем то никому не
вредит (процедура тривиальная), а драйверу скажет "разорви соединение, если был
подключен".

Патч тривиален, просьба приложить как в Sisyphus так и в branch/4.0:
diff --git a/wpa_supplicant/driver_wext.c b/wpa_supplicant/driver_wext.c
index de97950..7a3daf9 100644
--- a/wpa_supplicant/driver_wext.c
+++ b/wpa_supplicant/driver_wext.c
@@ -1796,6 +1796,12 @@ wpa_driver_wext_associate(void *priv,
        int value;
 
        wpa_printf(MSG_DEBUG, "%s", __FUNCTION__);
+       /*
+        * DeAuthenticate workaround for already authentificated driver
+        *
+        */
+        
+       wpa_driver_wext_deauthenticate(drv,params->bssid,0);
 
        /*
         * If the driver did not support SIOCSIWAUTH, fallback to
Comment 1 Anton Farygin 2007-09-14 03:01:16 MSD
перевешиваю на "последнего кто изменял"

Стас, внеси пожалуйста данное изменение.
2lioka: посмотри, на твой взгляд - что-то оно сломает ? я у себя протестировал -
работает fine, как с настроенной точкой так и с отключенной.
Comment 2 Anton Farygin 2007-09-14 03:10:53 MSD
Забыл добавить - эта ошибка вылезает только в случае использование
аутентификации WEP а не WPA
Comment 3 Anton Farygin 2011-09-10 11:13:41 MSK
давно исправлено.