一、 整体架构:
二、 WLAN驱动加载:
驱动源码目录:
三、 启动WPA_SUPPLICANT :
wpa_supplicant是一个连接、配置WIFI的工具
源码位置
服务声明部分:
device/qcom/common/rootdir/etc/init.qcom.rc 注意这个服务一开始是disable的
wpa_supplicant的启动是通过属性控制服务的启动:
这样wpa_supplicant就被启动了,可以用来控制wlan
四、 WIFI搜索:
P2P搜索过程
五、 DHCP :
Android8之前版本:
Android8之后版本
六、 DNS :
常用的域名解析函数
gethostbyname()
getaddrinfo()
Android中不管是在java中还是C中去解析域名不是直接连到域名服务器去查询的。
源码部分:
LIBC部分
NETD部分
七、 关于eBPF:
eBPF 简介
扩展型柏克莱封包过滤器 (eBPF) 是一个内核中的虚拟机,可运行用户提供的 eBPF 程序。这些程序可以挂接到内核中的探测点或事件、收集有用的统计信息,并将结果存储在多种数据结构中。程序通过 bpf(2) 系统调用加载到内核中,并作为 eBPF 机器指令的二进制 blob 由用户提供。Android 构建系统支持使用下文所述的简单构建文件语法将 C 程序编译为 eBPF 程序。
ConnectivityManager.java用来管理网络接口
public Network getActiveNetwork() {
try {
return mService.getActiveNetwork(); //--> getDefaultNetwork();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
public Network[] getAllNetworks() {
enforceAccessPermission();
synchronized (mNetworkForNetId) {
final Network[] result = new Network[mNetworkForNetId.size()];
for (int i = 0; i < mNetworkForNetId.size(); i++) {
result[i] = mNetworkForNetId.valueAt(i).network;
}
return result;
}
}
//Network.java
createSocket()
connectToHost()
openConnection()
.....