Android7 增加雙以太網eth1的支持

--- 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;
+            if(iface.equals("eth1")){ //增加一個判斷優化影響wifi問題
+             mIface = iface; //更新mIface後面dhcp IP用
+             }else{
+             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);
                                }
                            }
                        }
                    };

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章