Android的DHCP功能包含两个独立的部分:dhcpcd和netcfg。
1)dhcpcd位于external\dhcpcd目录下,在系统中以service的方式存在,负责通过dhcp协议为Android系统获取IP地址。
上层应用通过对dhcpcd service的操作来实现DHCP功能。其调用流程大体如下:
runDhcp(java) -- android_net_utils_runDhcp(JNI) --- android_net_utils_runDhcpCommon(C++)-- dhcp_do_request(C)
在init.rc或init.{boardtype}.rc中定义了dhcpcd对应的service。
2)netcfg位于system/core/netcfg目录下,提供了系统命令行的网络配置功能。其支持的功能定义在如下结构体中:
CMDS[] = {
{ "dhcp", 1, do_dhcp },
{ "up", 1, ifc_up },
{ "down", 1, ifc_down },
{ "flhosts", 1, ifc_remove_host_routes },
{ "deldefault", 1, ifc_remove_default_route },
{ "hwaddr", 2, set_hwaddr },
{ 0, 0, 0 },
其中,dhcp相关功能的实现代码位于system\core\libnetutils目录下。