2016-03-05 2 views
1

Я хотел бы ограничить Wi-Fi-сети, которые пользователь может выбрать на Android (Cyanogenmod). Один из моих подходов - это фильтрация сетей на уровне обслуживания. Однако я не могу найти, как WifiManager привязан к wpa_supplicant. так что я задаю следующие вопросы:Как подключается Android WifiManager к wpa_supplicant?

  1. Как Java Wifi-Stack связан с wpa_supplicant?
  2. Любые другие идеи о том, как ограничить Wi-Fi-сети для пользователей планшета Android?

Ответ на вопрос 1, как правило, поможет мне понять, как службы Android связаны с услугами linux.

UPDATE:

Копаем больше в Android код, я нашел реальные вопросы:

  • Где найти реализацию IWifiManager?
  • Где находится WifiManager, инициированный системой?
+0

Вы пытаетесь создать свой собственный ПЗУ на основе цианогенмода? –

+0

Да, это верно Дэвид. – Martin

ответ

2

Каким образом Java Wifi-Stack связан с wpa_supplicant?

В «старое доброе время» Android, то Java полагался на некоторой JNI общаться с wpa_supplicant использования пары локальных сокетов (файловые дескрипторы) для общения в текстовой форме с ним. Запись/чтение через select() в файле des '. Если у вас есть wpa_supplicant работает (или hostapd), если вы настроены эти правильно у вас есть локальный сокет, который вы можете выбрать/команды чтения/записи и получить результаты от

Смотрите здесь для некоторых объяснений по этому поводу:.

https://w1.fi/wpa_supplicant/devel/ctrl_iface_page.html

Вы можете экспериментировать с этим самостоятельно, используя wpa_cli или hostapd_cli программ на вашем компьютере, которые делают только что:. посылать команды демона, получить асинхронные ответы, и т.д. рамочный/Rince/повтор для ВПА вир»использовать его -C = ctrl_interface parameter, а для hostapd используйте опцию пути -g global control interface или сделайте это в соответствующий файл конфигурации. То, что вы в основном получаете, - это своего рода оболочка, сообщающаяся с демонами, поэтому все это сводится к созданию командных строк и анализу ответов строк. Вы можете обнаружить, что это находится в wifi-legacy или что-то в этом дереве вашего Android-источника.

И это был очень прагматичный, простой подход, который только что сработал.

Теперь реальное, долгосрочное решение, правильный способ связи с ядром Wi-Fi mac80211/nl80211 уровней составляет libnl. И из того, что я вижу, именно так использует Google в наши дни. НО! B UT: он имеет крутую кривую обучения, потому что библиотека libnl, которая должна быть использована для этого, является очень расширяемой/общей, что означает «сложнее сделать самую основную вещь», и libnl пришел с довольно многими Изменения API. Если вы Google, никаких проблем с этим, это очень ценная инвестиция, и мы не будем так долго обойти это, поэтому идите, мы будем использовать ее повсюду.Используйте команду libnl для связи с уровнями ядра 802.11 и создайте над этим код более высокого уровня.

Если вы обычный пользователь, добро пожаловать на несколько дней (недель?), Чтобы попасть в libnl для использования по стандарту 802.11.

+0

Спасибо за объяснение, jbm. Однако я больше искал объяснение абстрактного «WifiManager» get, связанного с конкретной реализацией оболочки wpa_supplicant. Netlink (libnl), по-моему, не используется для связи между wpa_supplicant и WifiManager, а скорее для связи с стекей Wifi ядра. – Martin

0

Чтобы ответить только на вопрос о местоположении кода, IWifiManager.Stub реализован в WifiServiceImpl. До L это было в WifiService.

Смежные вопросы