本文转载自:http://blog.csdn.net/tankai19880619/article/details/42972551

一、现象

12小时压测wifi连接后,发现网络连接中断;相关log:

我们关心状态变化部分ConnectivityService: ConnectivityChange for WIFI

  1. 01-19-17:42;0501-01 08:00:38.552   954  1117 D ConnectivityService: --NetworkStateTracker.EVENT_STATE_CHANGED handle--
  2. 01-19-17:42;0501-01 08:00:38.552   954  1117 D ConnectivityService: ConnectivityChange for WIFI: CONNECTED/CONNECTED
  3. 01-19-17:42;0501-01 08:00:38.552   954  1117 D ConnectivityService: Setting TCP values: [524288,1048576,2097152,262144,524288,1048576] which comes from [net.tcp.buffersize.wifi]
  4. /////////////////////////////////////////////////////////////////////////////////////////////////////12hago
  5. 01-20-05:14;2201-01 19:33:18.943  1267  1386 V shizx   : @@@clienttype:@@@TCL-CN-MT55CD-F3700A-LG
  6. 01-20-05:14;22ERROR!!! MlmeEnqueueForRecv: un-recongnized mgmt->subtype=15
  7. 01-20-05:14;2301-01 19:33:19.572   954  1808 E Dhinit:
  8. 01-20-05:14;23 waitpid returned pid 1835, status = 00000009
  9. 01-20-05:14;23cpStateMacinit: process 'dhcpcd_wlan0', pid 1835 exited
  10. 01-20-05:14;23hine: DHCP failed on wlan0: Timed out waiting for DHCP Renew to finish
  11. 01-20-05:14;2301-01 19:33:19.574   954  1808 D DHCP    : ifc_init, return = 0
  12. 01-20-05:14;2301-01 19:33:19.574   954  1808 D DHCP    : ifc_set_addr(wlan0, xx) = 0
  13. 01-20-05:14;2301-01 19:33:19.574   954  1808 D DHCP    : ifc_close
  14. 01-20-05:14;2301-01 19:33:19.779   954  1115 D WifiHW  : send cmd is DRIVER POWERMODE 0
  15. 01-20-05:14;2301-01 19:33:19.779   954  1115 D WifiHW  : send cmd is DRIVER BTCOEXMODE 2
  16. 01-20-05:14;2301-01 19:33:19.781   954  1115 E WifiStateMachine: IP configuration failed
  17. 01-20-05:14;2301-01 19:33:19.781   954  1115 D WifiHW  : send cmd is DISCONNECT
  18. 01-20-05:14;2301-01 19:33:19.782  1558  1558 D wpa_supplicant: wpa_driver_wext_deauthenticate
  19. 01-20-05:14;2301-01 19:33:19.789  1558  1558 D wpa_supplicant: wpa_driver_wext_set_key: alg=0 key_idx=0 set_tx=0 seq_len=0 key_len=0
  20. 01-20-05:14;2301-01 19:33:19.790  1558  1558 D wpa_supplicant: wpa_driver_wext_set_key: alg=0 key_idx=1 set_tx=0 seq_len=0 key_len=0
  21. 01-20-05:14;2301-01 19:33:19.790   954  1110 D NetdConnector: RCV <- {600 Iface linkstate wlan0 up}
  22. 01-20-05:14;2301-01 19:33:19.793  1558  1558 D wpa_supplicant: wpa_driver_wext_set_key: alg=0 key_idx=2 set_tx=0 seq_len=0 key_len=0
  23. 01-20-05:14;2301-01 19:33:19.793  1558  1558 D wpa_supplicant: wpa_driver_wext_set_key: alg=0 key_idx=3 set_tx=0 seq_len=0 key_len=0
  24. 01-20-05:14;2301-01 19:33:19.794  1558  1558 D wpa_supplicant: wpa_driver_wext_set_key: alg=0 key_idx=0 set_tx=0 seq_len=0 key_len=0
  25. 01-20-05:14;2301-01 19:33:19.795  1558  1558 D wpa_supplicant: wpa_driver_wext_set_operstate: operstate 1->0 (DORMANT)
  26. 01-20-05:14;2301-01 19:33:19.795  1558  1558 D wpa_supplicant: netlinkinit:
  27. 01-20-05:14;23 waitpid returned pid 1126, status = 00000009
  28. 01-20-05:14;23init: process 'dhcpcd_eth0', pid 1126 exited
  29. 01-20-05:14;23: Operstate: linkmode=-1, operstate=5

二、分析

关键部分:

  1. DhcpStateMachine: DHCP failed on wlan0: Timed out waiting for DHCP Renew to finish
  2. init: waitpid returned pid 1835, status = 00000009
  3. init: process 'dhcpcd_wlan0', pid 1835 exited

1.frameworks/base/core/java/android/net/DhcpStateMachine.java

  1. private boolean runDhcp(DhcpAction dhcpAction) {
  2. if (dhcpAction == DhcpAction.START) {
  3. if (DBG) Log.d(TAG, "DHCP request on " + mInterfaceName);
  4. success = NetworkUtils.runDhcp(mInterfaceName, dhcpInfoInternal);
  5. mDhcpInfo = dhcpInfoInternal;
  6. } else if (dhcpAction == DhcpAction.RENEW) {
  7. if (DBG) Log.d(TAG, "DHCP renewal on " + mInterfaceName);
  8. success = NetworkUtils.runDhcpRenew(mInterfaceName, dhcpInfoInternal); //f分析该函数
  9. dhcpInfoInternal.updateFromDhcpRequest(mDhcpInfo);
  10. }
  11. if (success) {
  12. ......
  13. } else {
  14. //这里就是打印:DhcpStateMachine: DHCP failed on wlan0: Timed out waiting for DHCP Renew to finish
  15. Log.e(TAG, "DHCP failed on " + mInterfaceName + ": " +
  16. NetworkUtils.getDhcpError());
  17. NetworkUtils.stopDhcp(mInterfaceName);
  18. mController.obtainMessage(CMD_POST_DHCP_ACTION, DHCP_FAILURE, 0)
  19. .sendToTarget();
  20. }
  21. return success;
  22. }

2.frameworks/base/core/java/android/net/NetworkUtils.java

  1. public native static boolean runDhcpRenew(String interfaceName, DhcpInfoInternal ipInfo);

3.frameworks/base/core/jni/android_net_NetUtils.cpp

  1. static jboolean android_net_utils_runDhcpRenew(JNIEnv* env, jobject clazz, jstring ifname, jobject info)
  2. {
  3. return android_net_utils_runDhcpCommon(env, clazz, ifname, info, true);
  4. }
  5. static jboolean android_net_utils_runDhcpCommon(JNIEnv* env, jobject clazz, jstring ifname,
  6. jobject info, bool renew)
  7. {
  8. if (renew) {
  9. result = ::dhcp_do_request_renew(nameStr, ipaddr, gateway, &prefixLength,
  10. dns1, dns2, server, &lease, vendorInfo);
  11. }
  12. }

4.system/core/libnetutils/dhcp_utils.c

  1. int dhcp_do_request_renew(const char *interface,
  2. char *ipaddr,
  3. char *gateway,
  4. uint32_t *prefixLength,
  5. char *dns[],
  6. char *server,
  7. uint32_t *lease,
  8. char *vendorInfo,
  9. char *domain,
  10. char *mtu)
  11. {
  12. if (wait_for_property(result_prop_name, NULL, 30) < 0) {
  13. snprintf(errmsg, sizeof(errmsg), "%s", "Timed out waiting for DHCP Renew to finish"); //这是最关键的错误部分
  14. return -1;
  15. }
  16. }
  17. static int wait_for_property(const char *name, const char *desired_value, int maxwait)
  18. {
  19. char value[PROPERTY_VALUE_MAX] = {'\0'};
  20. int maxnaps = (maxwait * 1000) / NAP_TIME;
  21. if (maxnaps < 1) {
  22. maxnaps = 1;
  23. }
  24. //add by tank
  25. //  add for MStar Android Patch Begin
  26. maxnaps = maxnaps + 1;
  27. usleep(50*1000);
  28. //  add for MStar Android Patch End
  29. //end tank
  30. while (maxnaps-- > 0) {
  31. usleep(NAP_TIME * 1000);
  32. if (property_get(name, value, NULL)) {
  33. if (desired_value == NULL ||
  34. strcmp(value, desired_value) == 0) {
  35. return 0;
  36. }
  37. }
  38. //add by tank@
  39. //  add for MStar Android Patch Begin
  40. usleep(NAP_TIME * 1000);
  41. //  add for MStar Android Patch End
  42. //end tank
  43. }
  44. return -1; /* failure */
  45. }

三、解决

合入上处4中add by tank后问题解决。

其他问题,mac地址冲突导致重启后无法获取IP。

    1. D/NetdConnector(  958): RCV <- {213 5c:36:b8:4d:ab:7a 0.0.0.0 0 [up broadcast multicast]}
    2. D/NetdConnector(  958): RSP <- {213 5c:36:b8:4d:ab:7a 0.0.0.0 0 [up broadcast multicast]}
    3. D/NetworkManagementService(  958): rsp <213 5c:36:b8:4d:ab:7a 0.0.0.0 0 [up broadcast multicast]>
    4. D/NetworkManagementService(  958): flags <[up broadcast multicast]>
    5. D/NetworkManagementService(  958): Registering observer
    6. I/EthernetStateTracker(  958): reset device eth0
    7. D/NetUtils(  958): android_net_utils_resetConnections in env=0x7d6950 clazz=0xad200001 iface=eth0 mask=0x3
    8. D/DHCP    (  958): ifc_init, return = 0
    9. D/DHCP    (  958): ifc_close
    10. D/DHCP    (  958): ifc_init, return = 0
    11. D/DHCP    (  958): ifc_up(eth0) = 0
    12. D/DHCP    (  958): ifc_close
    13. D/DHCP    (  958): ifc_init, return = 0
    14. D/DHCP    (  958): ifc_close
    15. D/DHCP    (  958): ifc_init, return = 0
    16. D/DHCP    (  958): ifc_close
    17. D/dhcp    ( 1124): enter dhcpcd service
    18. D/dhcp    ( 1124): enter dhcpcd service add options
    19. D/dhcp    ( 1124): enter dhcpcd service leave option
    20. D/dhcp    ( 1124): enter dhcpcd service chdir
    21. D/dhcp    ( 1124): enter dhcpcd service dump
    22. D/dhcp    ( 1124): enter dhcpcd service master
    23. E/dhcp    ( 1124): version 5.2.10 starting
    24. D/DHCP    ( 1124): ifc_init, return = 0
    25. D/DHCP    ( 1124): ifc_close
    26. F/dhcp    ( 1124): eth0: using hwaddr 5c:36:b8:4d:ab:7a
    27. F/dhcp    ( 1124): eth0: executing `/system/etc/dhcpcd/dhcpcd-run-hooks', reason PREINIT
    28. I/dhcp    ( 1124): host does not support a monotonic clock - timing can skew
    29. F/dhcp    ( 1124): eth0: reading lease `/data/misc/dhcp/dhcpcd-eth0.lease'
    30. E/dhcp    ( 1124): eth0: broadcasting for a lease
    31. F/dhcp    ( 1124): eth0: sending DISCOVER (xid 0xd92bbde3), next in 3.54 seconds

Android系统DHCP问题【转】的更多相关文章

  1. 深入浅出 - Android系统移植与平台开发(五)- 编译Android源码(转)

    2.3编译Android源码 Android源码体积非常庞大,由Dalvik虚拟机.Linux内核.编译系统.框架代码.Android定制C库.测试套件.系统应用程序等部分组成,在编译Android源 ...

  2. Android系统在超级终端下必会的命令大全(adb shell命令大全)

    . 显示系统中全部Android平台: android list targets . 显示系统中全部AVD(模拟器): android list avd . 创建AVD(模拟器): android c ...

  3. [总结]Android系统体系结构

    Android 从图中可以看出Android主要的组成部分,其中底层是Linux的内核,包括的主要就是文件.内存.系统资源等的管理,Google在这部分的工作主要就是电源管理和一部分驱动,并且整合上层 ...

  4. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  5. (转)android系统架构及源码目录结构

    转自:http://blog.csdn.net/finewind/article/details/46324507 1. Android系统架构: android系统架构采用了分层架构的思想,如下图所 ...

  6. Android 系统属性-SystemProperties详解***

    创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是androi ...

  7. 最新Android系统版本与API等级对应关系表

    最新Android系统版本与API等级对应关系表 从Android官网拷过来的,方便查阅... 官网地址:https://developer.android.com/guide/topics/mani ...

  8. Android系统全貌 (转)

    转自Gityuan的Android开篇,对自我学习作进一步整理. Android系统以Linux内核作为基底,上层采用Native层和Java层.系统分为内核空间和用户空间,并通过系统调用(Sysca ...

  9. android系统release签名

    转自:http://blog.csdn.net/yangkai6121/article/details/38682321 为什么需要给Android系统签个名才能进行CTS认证呢?原来我们通过make ...

随机推荐

  1. .Net Core中的配置文件源码解析

    一.配置简述 之前在.Net Framework平台开发时,一般配置文件都是xml格式的Web.config,而需要配置其他格式的文件就需要自己去读取内容,加载配置了..而Net Core支持从命令行 ...

  2. Unix domain socket

    转载:http://www.cnblogs.com/chekliang/p/3222950.html socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是 ...

  3. 邁向IT專家成功之路的三十則鐵律 鐵律六:求全求盈之道-佈施

    如果您只是在IT方面的專業技術與經驗相當高超,而不懂得在日常生活之中當一位俠義肝膽之人,來隨時隨地伸手幫助身旁需要幫助的人,那麼您只能算是一位有勇有謀但卻無智慧的匹夫罷了.既是匹夫那麼即便成功也會是短 ...

  4. 一道简单DP题

    问题: 给定一个整数的数组,相邻的数不能同时选,求从该数组选取若干整数,使得他们的和最大,要求只能使用o(1)的空间复杂度.要求给出伪码. 解答: int maxSum(vector<int&g ...

  5. Python基础语法01

    Python 标识符 在python里,标识符有字母.数字.下划线组成. 在python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. python中的标识符是区分大小写的. 以 ...

  6. class文件结构浅析(2)

    欢迎转载,转载需声明出处 ------------------ 请先看上一篇:Class类文件结构浅析 上一篇讲的都是理论.以下我们亲自实践一下. 首先编写一个简单的java类: public cla ...

  7. 用Visual C++ 2010 载入动态链接库三部曲(使用第三方库的一般方法)

    以下以载入编译好的ACE动态链接库为例说明:这里如果你已经设置了环境变量ACE_ROOT ACE在VS2010下高速配置载入动态链接库三部曲:(这里如果你的ACE文件夹为E:\ACE_wrappers ...

  8. 在CentOS 7上构建RAID5、LVM和SAMBAserver(5)——架设SAMBAserver

    在CentOS 7上构建RAID5.LVM和SAMBAserver(5)--架设SAMBAserver 6. 架设SAMBAserver 6.1. 预备 本节的任务是配置SAMBA服务,共享/home ...

  9. Web框架Django(二)

    一.Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层 ...

  10. mysql (8.0 或以下)数据 卸载, 安装, 创建用户, 赋权

    卸载 安装 创建用户wmxl create user 'wmxl'@'202.115.253.71' identified by '你的密码' 如果是mysql8.0,再输入以下 ALTER USER ...