OS: Android 6.0
Kernel: 3.10.92
之前分析了WiFi的连接,连接上之后会获取ip地址.
自从Android6.0之后,Google引入了一个new DHCP client,它的代码都是融入在JAVA Framework中,而旧的则是以service: /system/bin/dhcpcd的形式存在,代码用C实现.
不知道引入new dchp client带来了什么好处,但是发现部分网友有遇到获取IP address失败的情况。
而是否用new DHCP client可以在Settings中的开发者选项里做切换:
下面是New DHCP Client的代码调用过程:
enter -> WifiStateMachine.java //ObtainingIpState
startDhcp -> //动态获取ip
maybeInitDhcpStateMachine -> //创建dhcp状态机
DhcpClient.makeDhcpStateMachine ->
new DhcpClient ->
createStateMachineCommandIntent //创建“KICK”intent后面用来处理packet
setInitialState(mStoppedState); //默认是mStoppedState状态
client.start ->
smh.completeConstruction //开始DhcpClient的状态运行
mDhcpStateMachine.sendMessage -> //DhcpStateMachine.CMD_START_DHCP
processMessage -> DhcpClient.java //StoppedState
transitionTo(mWaitBeforeStartState) ->
enter -> WaitBeforeStartState没有enter,调用父类DhcpState
initInterface ->
mIface.getHardwareAddress //获得Mac地址
initSockets //ReceiveThread用来读取ipaddress
new ReceiveThread
mReceiveThread.start ->
&n