[RK3288][Android6.0] WiFi之DHCP获取IP address流程

本文详细介绍了Android 6.0系统中,使用新的DHCP客户端进行WiFi网络连接时获取IP地址的整个流程,从启动DhcpStateMachine到成功绑定IP的各个状态变化和关键函数调用。涉及到的步骤包括创建DhcpClient、初始化接口、发送Discover和Request包、接收并解码DhcpPacket,最终成功绑定IP并通知系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Platform: Rockchip
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值