我正在使用 Wifi Direct 和 Wifi 构建一个 android 设备网格。
我的基本方案如下:
WifiP2pManager.createGroup()
1)每个节点使用该方法构建一个Wifi Direct Group Owner(GO)接入点。然后它通过WifiP2pManager.addLocalService()
.
2) 每个节点也通过 扫描其他节点WifiP2pManager.discoverServices()
。当它找到另一个节点时,它会使用常规的旧版 Wifi: wifiManager.disconnect()
、wifiManager.enableNetwork()
和连接到该节点wifiManager.reconnect()
。
3) 更新路由表和 ipTables 以允许流量转发到正确的目的地。这需要root权限。
这种技术的问题在于 WifiP2p 为每个 Group Owner 分配相同的地址,192.168.49.1
并使用192.168.49.0/24
DHCP 中的池向加入 Group Owner 的设备发布地址。 因此,网格将无法通过多个跃点路由流量,因为所有链路都具有相同的 IP 空间。 已经提出了一些技术来克服网络之间的这种切换(使用存储转发来移动包),使用 IP 广播一次通过多个链接发送,以及修改 WifiP2p 以发布不同的地址。我正在研究修改 WifiP2p 实现的最后一个选项。
哪个库将 IP 块分配给192.168.49.1
Android 中的 Wifi Direct 组所有者?
在 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 库。 这是我需要您帮助了解要查看哪个 C 库的地方。
免责声明:我知道我将在自定义内核领域工作并使用有根设备。我已经扎根了我的测试台设备并了解风险。我也明白 Android 不是为此而构建的。我也知道 Wifi 802.11s 引入了网状网络(不符合 Android)。我确实希望使用 Wifi Direct(副蓝牙等),因为它利用了 wifi 基础设施模式的许多好处(节能、加密等)。汉斯在这里问了一个非常相似的问题,但不想根设备,我想根设备。