Как команда iwlist () сканирует беспроводные сети? - PullRequest
6 голосов
/ 29 мая 2009

Я хочу знать, как команда iwlist сканирует доступные беспроводные сети в linux. Я прочитал его исходный код, и был ioctl-вызов с использованием SIOCSIWSCAN для запуска сканирования и SIOCGIWSCAN для получения результатов сканирования. Но как кадры маяка захватываются и анализируются этими системными вызовами?

1 Ответ

11 голосов
/ 29 мая 2009

iwlist (8) и другие беспроводные инструменты предоставляют общий интерфейс для различных драйверов беспроводных устройств, которые поддерживают Linux Wireless Extensions (WEXT). Каждый драйвер регистрирует обработчики в WEXT, которые реализуют специфические для устройства операции, определенные этим интерфейсом. Для сканирования двумя обработчиками являются триггерное сканирование (команда SIOCSIWSCAN) и получение результатов сканирования (команда SIOCGIWSCAN). После того как устройство завершает сканирование, оно отправляет событие SIOCGIWSCAN в WEXT через интерфейс netlink . Приложение, прослушивающее этот сокет, может затем выполнить команду SIOCGIWSCAN, чтобы получить результаты сканирования с устройства. Обратите внимание, что устройство может свободно выполнять сканирование по своему усмотрению. Например, он может пассивно прослушивать маяки или активно сканировать, отправляя тестовые запросы.

Вышеприведенное намеренно неясно с механикой отправки команд на устройство, потому что есть традиционный способ (ioctl) и новый способ (netlink - cfg80211). Но для конкретного примера рассмотрим традиционный способ. Вызовы ioctl реализованы в модуле WEXT, но код, который обрабатывает эту команду, реализован в драйвере устройства. Когда приложение из пользовательского пространства создает ioctl, WEXT ищет обработчик драйвера устройства и запускает его.

...