Почему сканирование iwlist возвращает кэшированные результаты почти каждый раз?
У меня есть приставка с ядром Linux 2.6.32 (не могу обновить, пожалуйста, не предлагайте это). Я использую драйвер Realtek 8192CU, настроенный для использования драйвера WEXT. Что может заставить сканер iwlist постоянно возвращать кэшированные результаты? Кажется, когда STB загружается и выполняет свое первое сканирование, он получает точный список и просто подключается к точке доступа. Однако последующие сканы возвращают ту же самую информацию (даже сила и качество сигнала идентичны).
В редких случаях сканирование возвращает новые результаты, но я не могу найти какой-либо паттерн для периода времени между успешными сканированиями (иногда часами).
Когда доступен новый набор результатов, в dmesg появляется сообщение "Событие выполнено (xx)".
Используя wpa_cli, я запускаю следующую команду и получаю ответ.
>scan ra0
OK
<3>CTRL-EVENT-SCAN-RESULTS
Однако, wpa_cli scan_results возвращает ту же самую кешированную информацию, что и iwlist, и в dmesg нет НИКАКОГО сообщения "опрос завершен (xx)".
Кто-нибудь может пролить свет на то, что здесь происходит? Я хотел бы выяснить, как надежно запустить сканирование для новых точек доступа.
Спасибо за любую помощь заранее!
2 ответа
Надеюсь, кто-то найдет это полезным.
Кажется, что после нескольких копаний через драйвер 8192cu он не запустит сканирование, если сочтет себя "занятым" трафиком. Он просто вернет результаты сканирования в кэше. В среде, где у меня было установлено оборудование, было много многоадресного трафика, из-за чего оно почти всегда было "занято".
Чтобы это исправить, мне пришлось отредактировать одну строку в core/rtw_cmd.c. Вот разница.
1826c1826,1829
< if( pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 100 ||
---
> // in large networks with lots of multicast traffic,
> // I needed to increase the Rx threshold for bBusyTraffic
> // so that AP scanning would work
> if( pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 500 || // 100 ||
1831c1834
< if(pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 100)
---
> if(pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 500) // 100)
Столкнулся с той же проблемой. Обнаружено, что если вы запустите команду от имени пользователя root, она будет каждый раз сбрасывать кэш.