IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> [RK3399][Android7.1]机器长时间放置后概率出现以太网不能上网 -> 正文阅读

[移动开发][RK3399][Android7.1]机器长时间放置后概率出现以太网不能上网

问题描述:

客户反馈正常机器放置一天时间,第二天来发现以太网无法上网,以太网灯还是正常闪烁的。

问题分析:

1.尝试插拔网线,网络可以恢复正常

2.从抓取到的kernel log看,以太网无异常

3.ifconfig查看以太网ip信息,发现以太网无ip地址了

4.只有客户网络环境才能发现复现问题,我司测试未复现此问题

5.logcat查看log信息,ipv6地址配制失败了,DhcpClient 退出了

07-21 04:05:46.416 549 1232 D IpManager.eth0: newLp{{InterfaceName: eth0 LinkAddresses: [fe80::60fd:62ff:fec7:100a/64,192.168.1.73/24,240e:3b3:30b3:2390:60fd:62ff:fec7:100a/64,240e:3b3:30b3:2390:5f1:4223:5bdc:7b01/64,] Routes: [fe80::/64 -> :: eth0,240e:3b3:30b3:2390::/64 -> :: eth0,192.168.1.0/24 -> 0.0.0.0 eth0,0.0.0.0/0 -> 192.168.1.1 eth0,] DnsAddresses: [192.168.1.1,] Domains: null MTU: 0 TcpBufferSizes: 524288,1048576,3145728,524288,1048576,2097152}}
07-21 04:05:46.416 549 1232 D IpManager.eth0: onProvisioningFailure()
07-21 04:05:46.423 549 1232 D DhcpClient: doQuit
07-21 04:05:46.425 549 1247 D DhcpClient: Receive thread stopped
07-21 04:05:46.434 549 1235 D DhcpClient: onQuitting
07-21 04:05:46.440 247 545 D CommandListener: Setting iface cfg
07-21 04:05:46.448 549 1232 D IpManager.eth0: CMD_CLEAR_LINKADDRESS eth0/2 0 0 null [rcvd_in=StoppingState, proc_in=StoppingState]
07-21 04:05:46.449 549 1232 D IpManager.eth0: CMD_ON_QUIT eth0/2 0 0 null [rcvd_in=StoppingState, proc_in=StoppingState]
07-21 04:05:46.466 247 545 D CommandListener: Clearing all IP addresses on eth0
07-21 04:05:46.468 549 1232 D IpManager.eth0: newLp{{InterfaceName: eth0 LinkAddresses: [] Routes: [] DnsAddresses: [] Domains: null MTU: 0}}

解决方案:

这个应该是客户路由器网络不稳定造成的;从上述问题分析中我们可以在ip地址配置失败时重连网络来解决这个问题。

patch如下:

diff --git a/java/com/android/server/ethernet/EthernetNetworkFactory.java b/java/com/android/server/ethernet/EthernetNetworkFactory.java
index 4acf1d1..9b76b2f 100755
--- a/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -98,7 +98,7 @@ class EthernetNetworkFactory {
     private static final boolean DBG = true;
     private static final String ETHMODE_MULTI = "multi";
     private static final String ETHMODE_BRIDGE = "bridge";
-
+    private boolean isAddressRemove = true;
     /** Tracks interface changes. Called from NetworkManagementService. */
     private InterfaceObserver mInterfaceObserver;
 
@@ -131,7 +131,7 @@ class EthernetNetworkFactory {
     private LinkProperties mLinkProperties;
     private IpManager mIpManager;
     private Thread mIpProvisioningThread;
-
+   
     public int mEthernetCurrentState = EthernetManager.ETHER_STATE_DISCONNECTED;
     private boolean mReconnecting;
     private IpAssignment mConnectMode;
@@ -247,9 +247,11 @@ class EthernetNetworkFactory {
 
         synchronized(this) {
             mLinkUp = up;
+        //tryCount = 3;
             mNetworkInfo.setIsAvailable(up);
             if (!up) {
                 sendEthernetStateChangedBroadcast(EthernetManager.ETHER_STATE_DISCONNECTING);
+        isAddressRemove = true;
                 // Tell the agent we're disconnected. It will call disconnect().
                 mNetworkInfo.setDetailedState(DetailedState.DISCONNECTED, null, mHwAddr);
                 if (mConnectMode == IpAssignment.PPPOE) {
@@ -337,6 +339,44 @@ class EthernetNetworkFactory {
                 }
             }
         }
+
+    @Override
+    public void addressUpdated(String iface, LinkAddress address) {
+        if (!mIface.equals(iface)) {
+            return;
+        }
+        Log.e(TAG, "addressUpdated: " + iface + ":" + address);
+        if (mConnectMode == IpAssignment.DHCP) {
+            if (address.getAddress().getHostAddress().contains(".") && isAddressRemove) {
+                 isAddressRemove = false;
+            }
+          
+        }
+        
+    }
+
+    @Override
+    public void addressRemoved(String iface, LinkAddress address) {
+        if (!mIface.equals(iface)) {
+            return;
+        }
+        Log.e(TAG, "addressRemoved: " + iface + ":" + address);
+        if (mConnectMode == IpAssignment.DHCP) {
+            if (address.getAddress().getHostAddress().contains(".")  && !isAddressRemove) {
+                Log.e(TAG, "chunqiao disconnect: " + iface + ":" + address);
+                //disconnect(iface);
+            try {
+                    Thread.sleep(1000);    
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                } 
+                Log.e(TAG, "chunqiao reconnect: " + iface + ":" + address);
+                reconnect(iface);
+                
+            }
+       }
+   } 
+
     }
 
     private void setInterfaceUp(String iface) {

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2021-08-13 12:13:24  更:2021-08-13 12:17:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 23:33:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码