[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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Unity Cutout材质 实现网格效果[通俗易懂]

    Unity Cutout材质 实现网格效果[通俗易懂]Cutout????效果????贴图准备????材质制作????效果????如图所示铁丝网不是模型只是一张128*128的贴图制作的材质,这样可以极大的降低模型面数制作也很速度!????贴图准备????ps中制作一张128*128尺寸带透明通道的图,如下所示:????材质制作????设置RenderingMode为Cutout模式,并且把贴图放到Albedo槽中????可以调节Tiling属性增加或减少网格密度…

    2022年9月23日
    0
  • nyaa镜像站 nyaa反向代理站「建议收藏」

    提供一个可以磁力转种子,并且资源中心里边是nyaa镜像站的网站:https://magnet-vip.com资源中心做了登录限定,防止无法访问!

    2022年4月7日
    955
  • laravel多表登录出现路由调用错误

    laravel多表登录出现路由调用错误

    2021年10月25日
    37
  • mysql读写分离的意义_MySQL读写分离

    mysql读写分离的意义_MySQL读写分离如何实现mysql的读写分离?就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。MySQL主从复制原理的是啥?主库将变更写binlog日志,然后从库连接到主库之后,从库有一个IO线程,将主库的binlog日志拷贝到自己本地,写入一个中继日志中。接着从库中有一个SQL线程会从中继日志读取binlog,然后执行binlog日志中的…

    2022年6月13日
    24
  • goland 2021.10激活码和账号(注册激活)

    (goland 2021.10激活码和账号)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月27日
    64
  • 计算机机房安全设计规范,弱电机房建设规范要求

    计算机机房安全设计规范,弱电机房建设规范要求原标题:弱电机房建设规范要求工程中的数据中心机房建设是保证计算机网络设备和各级工作保障系统正常运转的关键。现在的计算机设备对运行环境要求较高。因此,必须按照一定的标准规范科学地设计机房。机房建设需要执行的标准主机房建设工程必须遵循国家机房设计标准规范的要求。场地要求计算机机房在多层建筑或高层建筑物内一般应设于第二、三层,水源充足,电力稳定可靠,应远离产生粉尘、油烟、有害气体以及贮存具有腐蚀性、易燃…

    2022年10月2日
    0

发表回复

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

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