Как команда iwlist () сканирует беспроводные сети?

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

1 ответов


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

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