Почему сканирование 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, она будет каждый раз сбрасывать кэш.

Другие вопросы по тегам