[RK3399/RK3328][Android10.0]Ethernet:以太网设置静态ip,重启后无法获取IP的问题「建议收藏」

[RK3399/RK3328][Android10.0]Ethernet:以太网设置静态ip,重启后无法获取IP的问题「建议收藏」测试平台Platform:RK3399/RK3328OS:Android10.0现象设置中设置以太网为静态ip,设置后使用ifconfig查看ip显示正常。然后重启,极大概率出现开机后设备没有获取到ip.分析解决测试后发现了几点规律:设置静态ip会开机获取不到ip,但是设置动态ip无问题没有获取到ip时,使用ifconfig查看,发现网卡设备连接正常。此时拔插网线,或者使用ifconfigeth0down+ifconfigeth0up来开关一次设备后,就能正常获取到ip

大家好,又见面了,我是你们的朋友全栈君。

测试平台

Platform: RK3399/RK3328
OS: Android 10.0

现象

设置中设置以太网为静态ip,设置后使用ifconfig查看ip显示正常。然后重启,极大概率出现开机后设备没有获取到ip.

分析解决

测试后发现了几点规律:

  1. 设置静态ip会开机获取不到ip,但是设置动态ip无问题
  2. 没有获取到ip时,使用ifconfig查看,发现网卡设备连接正常。此时拔插网线,或者使用ifconfig eth0 down + ifconfig eth0 up 来开关一次设备后,就能正常获取到ip

根据测试结果采取了如下的解决方案,在开机的时候在Ethernet服务中进行一次ifconfig eth0 down + ifconfig eth0 up的操作来解决.

修改补丁如下,测试20次后无问题,提交给到客户

diff --git a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java
index 308e328..919edc6 100644
--- a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java
+++ b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java
@@ -252,12 +254,41 @@ final class EthernetTracker { 
   
         }
     }
 
-    private void maybeTrackInterface(String iface) { 
   
+    private boolean maybeTrackInterface(String iface) { 
   
         if (DBG) Log.i(TAG, "maybeTrackInterface " + iface);
         // If we don't already track this interface, and if this interface matches
         // our regex, start tracking it.
         if (!iface.matches(mIfaceMatch) || mFactory.hasInterface(iface)) { 
   
-            return;
+            return false;
         }
 
         if (mIpConfigForDefaultInterface != null) { 
   
@@ -266,13 +297,31 @@ final class EthernetTracker { 
   
         }
 
         addInterface(iface);
+        return true;
     }
 
     private void trackAvailableInterfaces() { 
   
         try { 
   
             final String[] ifaces = mNMService.listInterfaces();
             for (String iface : ifaces) { 
   
-                maybeTrackInterface(iface);
+               if (maybeTrackInterface(iface)) { 
   
+                    String mIfaceTmp = iface;
+                    new Thread(new Runnable() { 
   
+                        public void run() { 
   
+                            // carrier is always 1 when kernel boot up no matter RJ45 plugin or not,
+                            // sleep a little time to wait kernel's correct carrier status
+                            try { 
   
+                                Thread.sleep(3000);
+                            } catch (InterruptedException ignore) { 
   
+                            }
+							if(isEthernetInterfaceActive()){ 
   
+                                IpConfiguration config = getIpConfiguration(mIfaceTmp);
+                                if(config != null && IpAssignment.STATIC == config.getIpAssignment())
+                                { 
   
+                                    updateInterfaceState(mIfaceTmp, false);
+                                    updateInterfaceState(mIfaceTmp, true);
+                                }
+                            }else{ 
   
+                                 updateInterfaceState(mIfaceTmp, false);
+                             }
+                        }
+                    }).start();
+                    break;
+                }
             }
         } catch (RemoteException | IllegalStateException e) { 
   
             Log.e(TAG, "Could not get list of interfaces " + e);


注:其实这是种治标不治本的解决办法,但是由于客户追的比较紧先采取这种解决方案,后续有时间再去查一下根本所在(根据测试log等,我猜想这是个由于加载顺序和获取ip的时机导致的随机问题)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139610.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • emule最新服务器地址,关于emule 服务器列表

    emule最新服务器地址,关于emule 服务器列表关于emule服务器列表我给你几个服务器列表吧。打开选项—务器。然后点右边的“列表”。把以下网址复制进去,保存。然后把启动时自动更新服务器列表连接到服务器时更新服务器列表安全连接打上勾。所谓静态服务器,就是你把服务器优先值设定为高,然后下次登录时系统会自动先尝试你选定的服务器。Kad网络(KadNetwork)是一个完全分散的文件共享网络,它不被中心服务器使用。它执行KademliaP2P…

    2022年6月14日
    105
  • 图书馆管理系统程序设计

    图书馆管理系统程序设计

    2021年11月18日
    45
  • 什么是债券久期[通俗易懂]

    什么是债券久期[通俗易懂]在做债券的投资分析中经常出现的一个词汇——债券久期,之前更多地是专注于开发,并不明白数字背后的业务含义,今天特意梳理下并做个记录。百度百科的解释:久期也称持续期,是1938年由F.R.Macaula

    2022年8月3日
    3
  • 超酷汇编教程-- 简明x86汇编语言教程(1)

    超酷汇编教程-- 简明x86汇编语言教程(1)第○章写在前面我不想夸大或者贬低汇编语言。但我想说,汇编语言改变了20世纪的历史。与前辈相比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘、坐在显示器面前,甚至使用鼠标、语音识别。我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇编程序来

    2022年6月21日
    25
  • 向域中批量创建用户

    向域中批量创建用户

    2021年5月27日
    107
  • element 输入框点击事件_ElementUI的input事件问题

    element 输入框点击事件_ElementUI的input事件问题最近用ElementUI的el-input组件,然后发现一个问题,就是我在输入框后,加一个icon的button,然后我希望这个输入框可以触发两个事件,第一个是,输入完,按键盘回车键的事件,第二个是,输入完,点icon的button的click事件。然后翻阅文档,发现可以给input加@change事件,这样按回车可以搜索,然后可以把icon的button写成slot的方式然后给button加@c…

    2022年4月30日
    657

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号