赞
踩
具体实现如下:
修改main 表优先级到9999, 作用:eth0 eth1 访问
不去teardown 低分数网线
- diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java
- index 418e9e3..72d15d5 100644
- --- a/service/src/com/android/server/ConnectivityService.java
- +++ b/service/src/com/android/server/ConnectivityService.java
- @@ -291,8 +291,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
- private static final String REQUEST_ARG = "requests";
-
- private static final boolean DBG = true;
- - private static final boolean DDBG = Log.isLoggable(TAG, Log.DEBUG);
- - private static final boolean VDBG = Log.isLoggable(TAG, Log.VERBOSE);
- + private static final boolean DDBG = true; //Log.isLoggable(TAG, Log.DEBUG);
- + private static final boolean VDBG = true; //Log.isLoggable(TAG, Log.VERBOSE);
-
- private static final boolean LOGD_BLOCKED_NETWORKINFO = true;
-
- @@ -1587,7 +1587,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
- handleAlwaysOnNetworkRequest(mDefaultMobileDataRequest,
- ConnectivitySettingsManager.MOBILE_DATA_ALWAYS_ON, true /* defaultValue */);
- handleAlwaysOnNetworkRequest(mDefaultWifiRequest,
- - ConnectivitySettingsManager.WIFI_ALWAYS_REQUESTED, false /* defaultValue */);
- + ConnectivitySettingsManager.WIFI_ALWAYS_REQUESTED, true/* defaultValue */);
- final boolean vehicleAlwaysRequested = mResources.get().getBoolean(
- R.bool.config_vehicleInternalNetworkAlwaysRequested);
- handleAlwaysOnNetworkRequest(mDefaultVehicleRequest, vehicleAlwaysRequested);
- @@ -3797,6 +3797,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
- // 2. If the network was inactive and there are now requests, unset inactive.
- // 3. If this network is unneeded (which implies it is not lingering), and there is at least
- // one lingered request, set inactive.
- + /****
- nai.updateInactivityTimer();
- if (nai.isInactive() && nai.numForegroundNetworkRequests() > 0) {
- if (DBG) log("Unsetting inactive " + nai.toShortString());
- @@ -3811,6 +3812,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
- logNetworkEvent(nai, NetworkEvent.NETWORK_LINGER);
- return true;
- }
- + ****/
- + loge("wade skip updateInactivityState.");
- return false;
- }
-
- @@ -6853,7 +6856,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
- return;
- }
- mNetworkOffers.add(noi);
- - issueNetworkNeeds(noi);
- + //issueNetworkNeeds(noi);
- }
-
- private void handleUnregisterNetworkOffer(@NonNull final NetworkOfferInfo noi) {
- @@ -7780,6 +7783,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
- }
-
- private void teardownUnneededNetwork(NetworkAgentInfo nai) {
- + /**
- if (nai.numRequestNetworkRequests() != 0) {
- for (int i = 0; i < nai.numNetworkRequests(); i++) {
- NetworkRequest nr = nai.requestAt(i);
- @@ -7790,6 +7794,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
- }
- }
- nai.disconnect();
- + **/
- + loge("wade skip teardownUnneededNetwork.");
- }
-
- private void handleLingerComplete(NetworkAgentInfo oldNetwork) {
- @@ -8113,6 +8119,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
- // Remove default networking if disallowed for managed default requests.
- bestNetwork = mNoServiceNetwork;
- }
- + loge("wade bestNetwork = " + bestNetwork + "bestRequest = " + bestRequest);
- if (nri.getSatisfier() != bestNetwork) {
- // bestNetwork may be null if no network can satisfy this request.
- changes.addRequestReassignment(new NetworkReassignment.RequestReassignment(
- @@ -8150,7 +8157,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
- log(changes.toString()); // Shorter form, only one line of log
- }
- applyNetworkReassignment(changes, now);
- - issueNetworkNeeds();
- + //issueNetworkNeeds();
- }
-
- private void applyNetworkReassignment(@NonNull final NetworkReassignment changes,

- diff --git a/server/RouteController.cpp b/server/RouteController.cpp
- index ba305e6..d38aec5 100644
- --- a/server/RouteController.cpp
- +++ b/server/RouteController.cpp
- @@ -721,6 +721,18 @@ int RouteController::configureDummyNetwork() {
- return 0;
- }
-
- +// Add a new rule to look up the 'main' table, with the same selectors as the "default network"
- +// rule, but with a lower priority. We will never create routes in the main table; it should only be
- +// used for directly-connected routes implicitly created by the kernel when adding IP addresses.
- +// This is necessary, for example, when adding a route through a directly-connected gateway: in
- +// order to add the route, there must already be a directly-connected route that covers the gateway.
- +[[nodiscard]] static int addDirectlyConnectedRule() {
- +
- + return modifyIpRule(RTM_NEWRULE, RULE_PRIORITY_DIRECTLY_CONNECTED, RT_TABLE_MAIN,
- + 0, 0/*, IIF_NONE, OIF_NONE, UID_ROOT, UID_ROOT*/);
- +}
- +
- +
- // Add an explicit unreachable rule close to the end of the prioriy list to make it clear that
- // relying on the kernel-default "from all lookup main" rule at priority 32766 is not intended
- // behaviour. We do flush the kernel-default rules at startup, but having an explicit unreachable
- @@ -1160,6 +1172,11 @@ int RouteController::Init(unsigned localNetId) {
- if (int ret = addUnreachableRule()) {
- return ret;
- }
- +
- + if (int ret = addDirectlyConnectedRule()) {
- + return ret;
- + }
- +
- // Don't complain if we can't add the dummy network, since not all devices support it.
- configureDummyNetwork();
-
- diff --git a/server/RouteController.h b/server/RouteController.h
- index 38d2d62..43ee148 100644
- --- a/server/RouteController.h
- +++ b/server/RouteController.h
- @@ -30,6 +30,7 @@
- namespace android::net {
-
- // clang-format off
- +const uint32_t RULE_PRIORITY_DIRECTLY_CONNECTED = 9999;
- const uint32_t RULE_PRIORITY_VPN_OVERRIDE_SYSTEM = 10000;
- const uint32_t RULE_PRIORITY_VPN_OVERRIDE_OIF = 11000;
- const uint32_t RULE_PRIORITY_VPN_OUTPUT_TO_LOCAL = 12000;

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。