我正在使用Wifi Direct和Wifi构建Android设备网格。
我的基本方案如下:
1)每个节点使用WifiP2pManager.createGroup()
方法构建Wifi直接组所有者(GO)接入点。然后它通过WifiP2pManager.addLocalService()
进行广告宣传。
2)每个节点还按WifiP2pManager.discoverServices()
扫描其他节点。当它找到另一个节点时,它使用常规的旧Wifi连接到该节点:wifiManager.disconnect()
,wifiManager.enableNetwork()
和wifiManager.reconnect()
。
3)更新路由表和ipTables以允许流量转发到正确的目的地。这需要root权限。
此技术的问题在于WifiP2p为每个组所有者分配192.168.49.1
的相同地址,并使用DHCP中的192.168.49.0/24
池向加入群组所有者的设备发出地址。 因此,网格将无法在多跳上路由流量,因为所有链路都具有相同的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库的地方。
免责声明:据我所知,我将使用定制内核并使用root设备。我已经根据我的测试床设备了解并了解风险。我也明白Android不是为了做到这一点而构建的。我也知道Wifi 802.11s引入了网状网络(未编入Android)。我做希望使用Wifi Direct(副蓝牙等),因为它利用了wifi基础设施模式(节能,加密等)的许多好处。汉斯问了一个very similar question here,但并不想根植设备,我希望能够使设备生根。