rk3399-9.0-wifi-以太网共存补丁

rk3399-9.0-wifi-以太网共存补丁

diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
old mode 100644
new mode 100755
index 150c91b..0ff90e5
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -208,6 +208,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
 
     private static final boolean LOGD_RULES = false;
     private static final boolean LOGD_BLOCKED_NETWORKINFO = true;
+   
+   // if true:
+   //    wifi and ethernet can coexist, if wifi and ethernet connect together, prefered to use ethernet
+   // if false:
+   //    wifi and ethernet can't coexist, if wifi and ethernet connect together, will tear down wifi
+   //    TODO: still have bug in this case to fix (like can't reconnect wifi when ethernet disconnect)
+   private static final boolean ENABLE_NETWORK_COEXIST = true;
 
     // TODO: create better separation between radio types and network types
 
@@ -5186,7 +5193,23 @@ public class ConnectivityService extends IConnectivityManager.Stub
                 break;
             }
         }
-        nai.asyncChannel.disconnect();
+       // nai.asyncChannel.disconnect();
+
+       if (ENABLE_NETWORK_COEXIST) {
+           log("Skip teardownUnneededNetwork: " + nai.name());
+            if (nai.getCurrentScore() > 0) { 
+                try { 
+                    mNetd.removeInterfaceFromNetwork(nai.linkProperties.getInterfaceName(), nai.network.netId);
+                    mNetd.addInterfaceToLocalNetwork(nai.linkProperties.getInterfaceName(), nai.linkProperties.getRoutes());
+                    mLegacyTypeTracker.add(nai.networkInfo.getType(), nai);
+                } catch (RemoteException e) { 
+                    Log.e(TAG, "Failed to add iface to local network " + e);
+                }
+            }
+                  
+        } else {            
+               nai.asyncChannel.disconnect();
+       }
     }
 
     private void handleLingerComplete(NetworkAgentInfo oldNetwork) {
@@ -5334,6 +5357,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
                     } else {
                         if (VDBG) log("   accepting network in place of null");
                     }
+                               if (ENABLE_NETWORK_COEXIST) {
+                        try {
+                            mNetd.removeInterfaceFromLocalNetwork(newNetwork.linkProperties.getInterfaceName());
+                        } catch(RemoteException e) {}
+                        updateLinkProperties(newNetwork,null);
+                    }
+
                     newNetwork.unlingerRequest(nri.request);
                     setNetworkForRequest(nri.request.requestId, newNetwork);
                     if (!newNetwork.addRequest(nri.request)) {
@@ -5664,6 +5694,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
             // This has to happen after matching the requests, because callbacks are just requests.
             notifyNetworkCallbacks(networkAgent, ConnectivityManager.CALLBACK_PRECHECK);
         } else if (state == NetworkInfo.State.DISCONNECTED) {
+            if (ENABLE_NETWORK_COEXIST) {
+                try {
+                    mNetd.removeInterfaceFromLocalNetwork(networkAgent.linkProperties.getInterfaceName());
+                } catch(RemoteException e) {}
+            }
             networkAgent.asyncChannel.disconnect();
             if (networkAgent.isVPN()) {
                 synchronized (mProxyLock) {
diff --git a/core/java/android/net/NetworkFactory.java b/core/java/android/net/NetworkFactory.java
old mode 100644
new mode 100755
index a897e90..1d927c3
--- a/core/java/android/net/NetworkFactory.java
+++ b/core/java/android/net/NetworkFactory.java
@@ -239,8 +239,8 @@ public class NetworkFactory extends Handler {
                 (n.score > mScore || n.request.networkCapabilities.satisfiedByNetworkCapabilities(
                 mCapabilityFilter) == false || acceptRequest(n.request, n.score) == false)) {
             if (VDBG) log("  releaseNetworkFor");
-            releaseNetworkFor(n.request);
-            n.requested = false;
+           // releaseNetworkFor(n.request);
+           // n.requested = false;
         } else {
             if (VDBG) log("  done");
         }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那肯定是很多年以后!

你的鼓励就我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值