1 Android netd DNS
libcore/ojluni/src/main/java/java/net/InetAddress.java
netd中dns server设置文件:ResolverController.cpp
netd中域名解析文件:DnsProxyListener.cpp
Figure 1-1 Android netd DNS
2 libc DNS解析函数
bionic/libc/dns/net/getaddrinfo.c
getaddrinfo()
bionic/libc/dns/net/getnameinfo.c
getnameinfo()
bionic/libc/dns/net/gethnamaddr.c
gethostbyname()
通过netd获取DNS服务器的IP地址(Ubuntu通过进程dnsmasq和配置文件/etc/resolv.conf),然后构建DNS请求包,查询域名对应的IP地址,并且按照netId的分类缓存到netd中:
bionic/libc/dns/net/gethnamaddr.c
gethostbyname_internal_real()
3 Android netId
3.1 获取网络接口的netId
netd中将接口名(wlan0、eth0等)转化为netId的函数:
server/NetworkController.cpp
NetworkController::getNetworkForInterface(const char*