欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android7 增加双以太网eth1的支持

程序员文章站 2022-07-01 20:18:43
...
--- a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -146,7 +146,8 @@ class EthernetNetworkFactory {
      */
     private void updateInterfaceState(String iface, boolean up) {
         if (!mIface.equals(iface)) {
-            return;
+                       mIface = iface;
+            //return;
         }
         Log.d(TAG, "updateInterface: " + iface + " link " + (up ? "up" : "down"));

Note1:

      Android 7 默认开机测试eth0是up的,eth1是down的,"cat: /sys/class/net/eth1/carrier: Invalid argument",网上说:有的网口为了省电驱动默认是down的,需要ifconfig eth1 up。QCOM平台双usb转网测试eth1开机需要手动"ifconfig eth1 up"才正常。这一行命令开机写到开机脚本也失败。暂时计划apk自启动后下发。测试可行。

//Android 7 framework层usb转网插拔、网线插拔检测类
private class InterfaceObserver extends BaseNetworkObserver {
        @Override
        public void interfaceLinkStateChanged(String iface, boolean up) {
            updateInterfaceState(iface, up); //网线插拔调用
        }

        @Override
        public void interfaceAdded(String iface) {
            maybeTrackInterface(iface); //usb转网连接调用
        }

        @Override
        public void interfaceRemoved(String iface) {
            stopTrackingInterface(iface); //usb转网移除调用
        }
    }

Note2:

        Android 7 以太网连接符号"<......>"只有eth1网口分配到IP地址后才会显示,手动ifconfig分配一个IP地址也可以显示。系统默认是只支持dhcp分配ip地址,在framework层onRequestNetwork函数中。

if (config.getIpAssignment() == IpAssignment.STATIC) {//静态
                    if (!setStaticIpAddress(config.getStaticIpConfiguration())) {
                        // We've already logged an error.
                        return;
                    }
                    linkProperties = config.getStaticIpConfiguration().toLinkProperties(mIface);
                } else {//动态
                    mNetworkInfo.setDetailedState(DetailedState.OBTAINING_IPADDR, null, mHwAddr);
                    WaitForProvisioningCallback ipmCallback = new WaitForProvisioningCallback() {
                        @Override
                        public void onLinkPropertiesChange(LinkProperties newLp) {
                            synchronized(EthernetNetworkFactory.this) {
                                if (mNetworkAgent != null && mNetworkInfo.isConnected()) {
                                    mLinkProperties = newLp;
                                    mNetworkAgent.sendLinkProperties(newLp);
                                }
                            }
                        }
                    };

 

相关标签: Android QCOM平台