Loading core/res/res/values/config.xml +7 −0 Original line number Diff line number Diff line Loading @@ -284,6 +284,13 @@ Settings.Global.NETWORK_AVOID_BAD_WIFI. This is the default value of that setting. --> <integer translatable="false" name="config_networkAvoidBadWifi">1</integer> <!-- If the hardware supports specially marking packets that caused a wakeup of the main CPU, set this value to the mark used. --> <integer name="config_networkWakeupPacketMark">0</integer> <!-- Mask to use when checking skb mark defined in config_networkWakeupPacketMark above. --> <integer name="config_networkWakeupPacketMask">0</integer> <!-- Default value for ConnectivityManager.getMultipathPreference() on metered networks. Actual device behaviour is controlled by Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE. This is the default value of that setting. --> Loading core/res/res/values/symbols.xml +2 −0 Original line number Diff line number Diff line Loading @@ -1834,6 +1834,8 @@ <java-symbol type="integer" name="config_networkNotifySwitchType" /> <java-symbol type="array" name="config_networkNotifySwitches" /> <java-symbol type="integer" name="config_networkAvoidBadWifi" /> <java-symbol type="integer" name="config_networkWakeupPacketMark" /> <java-symbol type="integer" name="config_networkWakeupPacketMask" /> <java-symbol type="integer" name="config_networkMeteredMultipathPreference" /> <java-symbol type="integer" name="config_notificationsBatteryFullARGB" /> <java-symbol type="integer" name="config_notificationsBatteryLedOff" /> Loading services/core/java/com/android/server/ConnectivityService.java +27 −17 Original line number Diff line number Diff line Loading @@ -210,13 +210,6 @@ public class ConnectivityService extends IConnectivityManager.Stub // See Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS private final int mReleasePendingIntentDelayMs; // Driver specific constants used to select packets received via // WiFi that caused the phone to exit sleep state. Currently there // is only one kernel implementation so we can get away with // constants. private static final int mWakeupPacketMark = 0x80000000; private static final int mWakeupPacketMask = 0x80000000; private MockableSystemProperties mSystemProperties; private Tethering mTethering; Loading Loading @@ -2282,6 +2275,10 @@ public class ConnectivityService extends IConnectivityManager.Stub notifyNetworkCallbacks(nai, ConnectivityManager.CALLBACK_LOST); mKeepaliveTracker.handleStopAllKeepalives(nai, ConnectivityManager.PacketKeepalive.ERROR_INVALID_NETWORK); for (String iface : nai.linkProperties.getAllInterfaceNames()) { // Disable wakeup packet monitoring for each interface. wakeupModifyInterface(iface, nai.networkCapabilities, false); } nai.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_DISCONNECTED); mNetworkAgentInfos.remove(msg.replyTo); updateClat(null, nai.linkProperties, nai); Loading Loading @@ -4401,22 +4398,35 @@ public class ConnectivityService extends IConnectivityManager.Stub } } private void wakeupAddInterface(String iface, NetworkCapabilities caps) throws RemoteException { private void wakeupModifyInterface(String iface, NetworkCapabilities caps, boolean add) { // Marks are only available on WiFi interaces. Checking for // marks on unsupported interfaces is harmless. if (!caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { return; } mNetd.getNetdService().wakeupAddInterface( iface, "iface:" + iface, mWakeupPacketMark, mWakeupPacketMask); } private void wakeupDelInterface(String iface, NetworkCapabilities caps) throws RemoteException { if (!caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { int mark = mContext.getResources().getInteger( com.android.internal.R.integer.config_networkWakeupPacketMark); int mask = mContext.getResources().getInteger( com.android.internal.R.integer.config_networkWakeupPacketMask); // Mask/mark of zero will not detect anything interesting. // Don't install rules unless both values are nonzero. if (mark == 0 || mask == 0) { return; } mNetd.getNetdService().wakeupDelInterface( iface, "iface:" + iface, mWakeupPacketMark, mWakeupPacketMask); final String prefix = "iface:" + iface; try { if (add) { mNetd.getNetdService().wakeupAddInterface(iface, prefix, mark, mask); } else { mNetd.getNetdService().wakeupDelInterface(iface, prefix, mark, mask); } } catch (Exception e) { loge("Exception modifying wakeup packet monitoring: " + e); } } private void updateInterfaces(LinkProperties newLp, LinkProperties oldLp, int netId, Loading @@ -4431,7 +4441,7 @@ public class ConnectivityService extends IConnectivityManager.Stub try { if (DBG) log("Adding iface " + iface + " to network " + netId); mNetd.addInterfaceToNetwork(iface, netId); wakeupAddInterface(iface, caps); wakeupModifyInterface(iface, caps, true); } catch (Exception e) { loge("Exception adding interface: " + e); } Loading @@ -4439,8 +4449,8 @@ public class ConnectivityService extends IConnectivityManager.Stub for (String iface : interfaceDiff.removed) { try { if (DBG) log("Removing iface " + iface + " from network " + netId); wakeupModifyInterface(iface, caps, false); mNetd.removeInterfaceFromNetwork(iface, netId); wakeupDelInterface(iface, caps); } catch (Exception e) { loge("Exception removing interface: " + e); } Loading Loading
core/res/res/values/config.xml +7 −0 Original line number Diff line number Diff line Loading @@ -284,6 +284,13 @@ Settings.Global.NETWORK_AVOID_BAD_WIFI. This is the default value of that setting. --> <integer translatable="false" name="config_networkAvoidBadWifi">1</integer> <!-- If the hardware supports specially marking packets that caused a wakeup of the main CPU, set this value to the mark used. --> <integer name="config_networkWakeupPacketMark">0</integer> <!-- Mask to use when checking skb mark defined in config_networkWakeupPacketMark above. --> <integer name="config_networkWakeupPacketMask">0</integer> <!-- Default value for ConnectivityManager.getMultipathPreference() on metered networks. Actual device behaviour is controlled by Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE. This is the default value of that setting. --> Loading
core/res/res/values/symbols.xml +2 −0 Original line number Diff line number Diff line Loading @@ -1834,6 +1834,8 @@ <java-symbol type="integer" name="config_networkNotifySwitchType" /> <java-symbol type="array" name="config_networkNotifySwitches" /> <java-symbol type="integer" name="config_networkAvoidBadWifi" /> <java-symbol type="integer" name="config_networkWakeupPacketMark" /> <java-symbol type="integer" name="config_networkWakeupPacketMask" /> <java-symbol type="integer" name="config_networkMeteredMultipathPreference" /> <java-symbol type="integer" name="config_notificationsBatteryFullARGB" /> <java-symbol type="integer" name="config_notificationsBatteryLedOff" /> Loading
services/core/java/com/android/server/ConnectivityService.java +27 −17 Original line number Diff line number Diff line Loading @@ -210,13 +210,6 @@ public class ConnectivityService extends IConnectivityManager.Stub // See Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS private final int mReleasePendingIntentDelayMs; // Driver specific constants used to select packets received via // WiFi that caused the phone to exit sleep state. Currently there // is only one kernel implementation so we can get away with // constants. private static final int mWakeupPacketMark = 0x80000000; private static final int mWakeupPacketMask = 0x80000000; private MockableSystemProperties mSystemProperties; private Tethering mTethering; Loading Loading @@ -2282,6 +2275,10 @@ public class ConnectivityService extends IConnectivityManager.Stub notifyNetworkCallbacks(nai, ConnectivityManager.CALLBACK_LOST); mKeepaliveTracker.handleStopAllKeepalives(nai, ConnectivityManager.PacketKeepalive.ERROR_INVALID_NETWORK); for (String iface : nai.linkProperties.getAllInterfaceNames()) { // Disable wakeup packet monitoring for each interface. wakeupModifyInterface(iface, nai.networkCapabilities, false); } nai.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_DISCONNECTED); mNetworkAgentInfos.remove(msg.replyTo); updateClat(null, nai.linkProperties, nai); Loading Loading @@ -4401,22 +4398,35 @@ public class ConnectivityService extends IConnectivityManager.Stub } } private void wakeupAddInterface(String iface, NetworkCapabilities caps) throws RemoteException { private void wakeupModifyInterface(String iface, NetworkCapabilities caps, boolean add) { // Marks are only available on WiFi interaces. Checking for // marks on unsupported interfaces is harmless. if (!caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { return; } mNetd.getNetdService().wakeupAddInterface( iface, "iface:" + iface, mWakeupPacketMark, mWakeupPacketMask); } private void wakeupDelInterface(String iface, NetworkCapabilities caps) throws RemoteException { if (!caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { int mark = mContext.getResources().getInteger( com.android.internal.R.integer.config_networkWakeupPacketMark); int mask = mContext.getResources().getInteger( com.android.internal.R.integer.config_networkWakeupPacketMask); // Mask/mark of zero will not detect anything interesting. // Don't install rules unless both values are nonzero. if (mark == 0 || mask == 0) { return; } mNetd.getNetdService().wakeupDelInterface( iface, "iface:" + iface, mWakeupPacketMark, mWakeupPacketMask); final String prefix = "iface:" + iface; try { if (add) { mNetd.getNetdService().wakeupAddInterface(iface, prefix, mark, mask); } else { mNetd.getNetdService().wakeupDelInterface(iface, prefix, mark, mask); } } catch (Exception e) { loge("Exception modifying wakeup packet monitoring: " + e); } } private void updateInterfaces(LinkProperties newLp, LinkProperties oldLp, int netId, Loading @@ -4431,7 +4441,7 @@ public class ConnectivityService extends IConnectivityManager.Stub try { if (DBG) log("Adding iface " + iface + " to network " + netId); mNetd.addInterfaceToNetwork(iface, netId); wakeupAddInterface(iface, caps); wakeupModifyInterface(iface, caps, true); } catch (Exception e) { loge("Exception adding interface: " + e); } Loading @@ -4439,8 +4449,8 @@ public class ConnectivityService extends IConnectivityManager.Stub for (String iface : interfaceDiff.removed) { try { if (DBG) log("Removing iface " + iface + " from network " + netId); wakeupModifyInterface(iface, caps, false); mNetd.removeInterfaceFromNetwork(iface, netId); wakeupDelInterface(iface, caps); } catch (Exception e) { loge("Exception removing interface: " + e); } Loading