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