Назначение IP-адреса владельца Wifi Direct Group в Android
Я работаю над созданием сетки устройств Android с использованием Wifi Direct и Wifi.
Моя основная схема такова:
1) Каждый узел создает точку доступа Wifi Direct Group Owner (GO), используя WifiP2pManager.createGroup()
метод. Затем он рекламирует это WifiP2pManager.addLocalService()
,
2) Каждый узел также сканирует другие узлы путем WifiP2pManager.discoverServices()
, Когда он находит другой узел, он подключается к этому узлу, используя обычный устаревший Wifi: wifiManager.disconnect()
, wifiManager.enableNetwork()
, а также wifiManager.reconnect()
,
3) Обновите таблицу маршрутизации и ipTables, чтобы позволить трафику перенаправить в правильный пункт назначения. Это требует корневых разрешений.
Проблема с этой техникой заключается в том, что WifiP2p назначает каждому владельцу группы один и тот же адрес 192.168.49.1
и использует 192.168.49.0/24
пул в DHCP для выдачи адресов устройствам, которые присоединяются к владельцу группы. Таким образом, сетка не сможет маршрутизировать трафик через несколько переходов, поскольку все ссылки имеют одинаковое пространство IP. Было предложено несколько методов для преодоления этого переключения между сетями (использование хранения и пересылки для перемещения пакетов), использование широковещательной IP-рассылки для одновременной отправки по нескольким каналам связи и изменение WifiP2p для выдачи разных адресов. Я работаю над последним вариантом изменения реализации WifiP2p.
Какой библиотеке назначается блок IP 192.168.49.1
владельцу группы Wifi Direct в Android?
В Android 4.0 он был напрямую назначен в WifiP2pService.java
по строкам 155 и 156:
155 | private static final String[] DHCP_RANGE = {"192.168.49.2", "192.168.49.254"};
156 | private static final String SERVER_ADDRESS = "192.168.49.1";
Начиная с Android 5.0 эта библиотека устарела. Я проследил текущую реализацию, пока она не покинет Java и не приступит к выполнению библиотек Си. Здесь мне нужна ваша помощь, чтобы понять, какую библиотеку C искать.
Отказ от ответственности: я понимаю, что я буду работать в кастомном ядре и работать с корневыми устройствами. Я уже укоренил свои испытательные стенды и понимаю риски. Я также понимаю, что Android не был создан для этого. Я также знаю, что Wifi 802.11s представил ячеистые сети (не соответствует Android). Я действительно хочу использовать Wifi Direct (наоборот, Bluetooth и т. Д.), Поскольку он использует многие преимущества режимов инфраструктуры Wi-Fi (энергосбережение, шифрование и т. Д.). Ханс задал очень похожий вопрос, но не хотел рутировать устройство, я хочу рутировать устройство.