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

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

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

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