Loading services/core/java/com/android/server/net/NetworkPolicyLogger.java +60 −17 Original line number Diff line number Diff line Loading @@ -24,9 +24,11 @@ import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_DOZABLE; import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_POWERSAVE; import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_STANDBY; import static android.net.NetworkPolicyManager.FIREWALL_RULE_DEFAULT; import static android.os.Process.INVALID_UID; import android.app.ActivityManager; import android.net.NetworkPolicyManager; import android.os.UserHandle; import android.util.Log; import android.util.Slog; Loading Loading @@ -79,19 +81,25 @@ public class NetworkPolicyLogger { private final LogBuffer mUidStateChangeBuffer = new LogBuffer(MAX_LOG_SIZE); private final LogBuffer mEventsBuffer = new LogBuffer(MAX_LOG_SIZE); private int mDebugUid = INVALID_UID; private final Object mLock = new Object(); void networkBlocked(int uid, int reason) { synchronized (mLock) { if (LOGD) Slog.d(TAG, uid + " is " + getBlockedReason(reason)); if (LOGD || uid == mDebugUid) { Slog.d(TAG, uid + " is " + getBlockedReason(reason)); } mNetworkBlockedBuffer.networkBlocked(uid, reason); } } void uidStateChanged(int uid, int procState, long procStateSeq) { synchronized (mLock) { if (LOGV) Slog.v(TAG, uid + " state changed to " + procState + " with seq=" + procStateSeq); if (LOGV || uid == mDebugUid) { Slog.v(TAG, uid + " state changed to " + ProcessList.makeProcStateString(procState) + " with seq=" + procStateSeq); } mUidStateChangeBuffer.uidStateChanged(uid, procState, procStateSeq); } } Loading @@ -105,78 +113,105 @@ public class NetworkPolicyLogger { void uidPolicyChanged(int uid, int oldPolicy, int newPolicy) { synchronized (mLock) { if (LOGV) Slog.v(TAG, getPolicyChangedLog(uid, oldPolicy, newPolicy)); if (LOGV || uid == mDebugUid) { Slog.v(TAG, getPolicyChangedLog(uid, oldPolicy, newPolicy)); } mEventsBuffer.uidPolicyChanged(uid, oldPolicy, newPolicy); } } void meterednessChanged(int netId, boolean newMetered) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getMeterednessChangedLog(netId, newMetered)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getMeterednessChangedLog(netId, newMetered)); } mEventsBuffer.meterednessChanged(netId, newMetered); } } void removingUserState(int userId) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getUserRemovedLog(userId)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getUserRemovedLog(userId)); } mEventsBuffer.userRemoved(userId); } } void restrictBackgroundChanged(boolean oldValue, boolean newValue) { synchronized (mLock) { if (LOGD) Slog.d(TAG, if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getRestrictBackgroundChangedLog(oldValue, newValue)); } mEventsBuffer.restrictBackgroundChanged(oldValue, newValue); } } void deviceIdleModeEnabled(boolean enabled) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getDeviceIdleModeEnabled(enabled)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getDeviceIdleModeEnabled(enabled)); } mEventsBuffer.deviceIdleModeEnabled(enabled); } } void appIdleStateChanged(int uid, boolean idle) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getAppIdleChangedLog(uid, idle)); if (LOGD || uid == mDebugUid) { Slog.d(TAG, getAppIdleChangedLog(uid, idle)); } mEventsBuffer.appIdleStateChanged(uid, idle); } } void appIdleWlChanged(int uid, boolean isWhitelisted) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getAppIdleWlChangedLog(uid, isWhitelisted)); if (LOGD || uid == mDebugUid) { Slog.d(TAG, getAppIdleWlChangedLog(uid, isWhitelisted)); } mEventsBuffer.appIdleWlChanged(uid, isWhitelisted); } } void paroleStateChanged(boolean paroleOn) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getParoleStateChanged(paroleOn)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getParoleStateChanged(paroleOn)); } mEventsBuffer.paroleStateChanged(paroleOn); } } void tempPowerSaveWlChanged(int appId, boolean added) { synchronized (mLock) { if (LOGV) Slog.v(TAG, getTempPowerSaveWlChangedLog(appId, added)); if (LOGV || appId == UserHandle.getAppId(mDebugUid)) { Slog.v(TAG, getTempPowerSaveWlChangedLog(appId, added)); } mEventsBuffer.tempPowerSaveWlChanged(appId, added); } } void uidFirewallRuleChanged(int chain, int uid, int rule) { synchronized (mLock) { if (LOGV) Slog.v(TAG, getUidFirewallRuleChangedLog(chain, uid, rule)); if (LOGV || uid == mDebugUid) { Slog.v(TAG, getUidFirewallRuleChangedLog(chain, uid, rule)); } mEventsBuffer.uidFirewallRuleChanged(chain, uid, rule); } } void firewallChainEnabled(int chain, boolean enabled) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getFirewallChainEnabledLog(chain, enabled)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getFirewallChainEnabledLog(chain, enabled)); } mEventsBuffer.firewallChainEnabled(chain, enabled); } } Loading @@ -185,7 +220,9 @@ public class NetworkPolicyLogger { synchronized (mLock) { final String log = "Firewall rules changed for " + getFirewallChainName(chain) + "; uids=" + Arrays.toString(uids) + "; rules=" + Arrays.toString(rules); if (LOGD) Slog.d(TAG, log); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, log); } mEventsBuffer.event(log); } } Loading @@ -193,11 +230,17 @@ public class NetworkPolicyLogger { void meteredRestrictedPkgsChanged(Set<Integer> restrictedUids) { synchronized (mLock) { final String log = "Metered restricted uids: " + restrictedUids; if (LOGD) Slog.d(TAG, log); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, log); } mEventsBuffer.event(log); } } void setDebugUid(int uid) { mDebugUid = uid; } void dumpLogs(IndentingPrintWriter pw) { synchronized (mLock) { pw.println(); Loading services/core/java/com/android/server/net/NetworkPolicyManagerService.java +4 −1 Original line number Diff line number Diff line Loading @@ -229,7 +229,6 @@ import com.android.internal.util.ConcurrentUtils; import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.internal.util.StatLogger; import com.android.server.EventLogTags; import com.android.server.LocalServices; Loading Loading @@ -3601,6 +3600,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { this, in, out, err, args, callback, resultReceiver); } void setDebugUid(int uid) { mLogger.setDebugUid(uid); } @VisibleForTesting boolean isUidForeground(int uid) { synchronized (mUidRulesFirstLock) { Loading services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java +21 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.Context; import android.net.NetworkPolicyManager; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Process; import android.os.RemoteException; import android.os.ShellCommand; Loading Loading @@ -58,6 +59,10 @@ class NetworkPolicyManagerShellCommand extends ShellCommand { return runAdd(); case "remove": return runRemove(); case "start-watching": return runStartWatching(); case "stop-watching": return runStopWatching(); default: return handleDefaultCommands(cmd); } Loading Loading @@ -197,6 +202,22 @@ class NetworkPolicyManagerShellCommand extends ShellCommand { return -1; } private int runStartWatching() { final int uid = Integer.parseInt(getNextArgRequired()); if (uid < 0) { final PrintWriter pw = getOutPrintWriter(); pw.print("Invalid UID: "); pw.println(uid); return -1; } mInterface.setDebugUid(uid); return 0; } private int runStopWatching() { mInterface.setDebugUid(Process.INVALID_UID); return 0; } private int listUidPolicies(String msg, int policy) throws RemoteException { final int[] uids = mInterface.getUidsWithPolicy(policy); return listUidList(msg, uids); Loading Loading
services/core/java/com/android/server/net/NetworkPolicyLogger.java +60 −17 Original line number Diff line number Diff line Loading @@ -24,9 +24,11 @@ import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_DOZABLE; import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_POWERSAVE; import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_STANDBY; import static android.net.NetworkPolicyManager.FIREWALL_RULE_DEFAULT; import static android.os.Process.INVALID_UID; import android.app.ActivityManager; import android.net.NetworkPolicyManager; import android.os.UserHandle; import android.util.Log; import android.util.Slog; Loading Loading @@ -79,19 +81,25 @@ public class NetworkPolicyLogger { private final LogBuffer mUidStateChangeBuffer = new LogBuffer(MAX_LOG_SIZE); private final LogBuffer mEventsBuffer = new LogBuffer(MAX_LOG_SIZE); private int mDebugUid = INVALID_UID; private final Object mLock = new Object(); void networkBlocked(int uid, int reason) { synchronized (mLock) { if (LOGD) Slog.d(TAG, uid + " is " + getBlockedReason(reason)); if (LOGD || uid == mDebugUid) { Slog.d(TAG, uid + " is " + getBlockedReason(reason)); } mNetworkBlockedBuffer.networkBlocked(uid, reason); } } void uidStateChanged(int uid, int procState, long procStateSeq) { synchronized (mLock) { if (LOGV) Slog.v(TAG, uid + " state changed to " + procState + " with seq=" + procStateSeq); if (LOGV || uid == mDebugUid) { Slog.v(TAG, uid + " state changed to " + ProcessList.makeProcStateString(procState) + " with seq=" + procStateSeq); } mUidStateChangeBuffer.uidStateChanged(uid, procState, procStateSeq); } } Loading @@ -105,78 +113,105 @@ public class NetworkPolicyLogger { void uidPolicyChanged(int uid, int oldPolicy, int newPolicy) { synchronized (mLock) { if (LOGV) Slog.v(TAG, getPolicyChangedLog(uid, oldPolicy, newPolicy)); if (LOGV || uid == mDebugUid) { Slog.v(TAG, getPolicyChangedLog(uid, oldPolicy, newPolicy)); } mEventsBuffer.uidPolicyChanged(uid, oldPolicy, newPolicy); } } void meterednessChanged(int netId, boolean newMetered) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getMeterednessChangedLog(netId, newMetered)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getMeterednessChangedLog(netId, newMetered)); } mEventsBuffer.meterednessChanged(netId, newMetered); } } void removingUserState(int userId) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getUserRemovedLog(userId)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getUserRemovedLog(userId)); } mEventsBuffer.userRemoved(userId); } } void restrictBackgroundChanged(boolean oldValue, boolean newValue) { synchronized (mLock) { if (LOGD) Slog.d(TAG, if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getRestrictBackgroundChangedLog(oldValue, newValue)); } mEventsBuffer.restrictBackgroundChanged(oldValue, newValue); } } void deviceIdleModeEnabled(boolean enabled) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getDeviceIdleModeEnabled(enabled)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getDeviceIdleModeEnabled(enabled)); } mEventsBuffer.deviceIdleModeEnabled(enabled); } } void appIdleStateChanged(int uid, boolean idle) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getAppIdleChangedLog(uid, idle)); if (LOGD || uid == mDebugUid) { Slog.d(TAG, getAppIdleChangedLog(uid, idle)); } mEventsBuffer.appIdleStateChanged(uid, idle); } } void appIdleWlChanged(int uid, boolean isWhitelisted) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getAppIdleWlChangedLog(uid, isWhitelisted)); if (LOGD || uid == mDebugUid) { Slog.d(TAG, getAppIdleWlChangedLog(uid, isWhitelisted)); } mEventsBuffer.appIdleWlChanged(uid, isWhitelisted); } } void paroleStateChanged(boolean paroleOn) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getParoleStateChanged(paroleOn)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getParoleStateChanged(paroleOn)); } mEventsBuffer.paroleStateChanged(paroleOn); } } void tempPowerSaveWlChanged(int appId, boolean added) { synchronized (mLock) { if (LOGV) Slog.v(TAG, getTempPowerSaveWlChangedLog(appId, added)); if (LOGV || appId == UserHandle.getAppId(mDebugUid)) { Slog.v(TAG, getTempPowerSaveWlChangedLog(appId, added)); } mEventsBuffer.tempPowerSaveWlChanged(appId, added); } } void uidFirewallRuleChanged(int chain, int uid, int rule) { synchronized (mLock) { if (LOGV) Slog.v(TAG, getUidFirewallRuleChangedLog(chain, uid, rule)); if (LOGV || uid == mDebugUid) { Slog.v(TAG, getUidFirewallRuleChangedLog(chain, uid, rule)); } mEventsBuffer.uidFirewallRuleChanged(chain, uid, rule); } } void firewallChainEnabled(int chain, boolean enabled) { synchronized (mLock) { if (LOGD) Slog.d(TAG, getFirewallChainEnabledLog(chain, enabled)); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, getFirewallChainEnabledLog(chain, enabled)); } mEventsBuffer.firewallChainEnabled(chain, enabled); } } Loading @@ -185,7 +220,9 @@ public class NetworkPolicyLogger { synchronized (mLock) { final String log = "Firewall rules changed for " + getFirewallChainName(chain) + "; uids=" + Arrays.toString(uids) + "; rules=" + Arrays.toString(rules); if (LOGD) Slog.d(TAG, log); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, log); } mEventsBuffer.event(log); } } Loading @@ -193,11 +230,17 @@ public class NetworkPolicyLogger { void meteredRestrictedPkgsChanged(Set<Integer> restrictedUids) { synchronized (mLock) { final String log = "Metered restricted uids: " + restrictedUids; if (LOGD) Slog.d(TAG, log); if (LOGD || mDebugUid != INVALID_UID) { Slog.d(TAG, log); } mEventsBuffer.event(log); } } void setDebugUid(int uid) { mDebugUid = uid; } void dumpLogs(IndentingPrintWriter pw) { synchronized (mLock) { pw.println(); Loading
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +4 −1 Original line number Diff line number Diff line Loading @@ -229,7 +229,6 @@ import com.android.internal.util.ConcurrentUtils; import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.internal.util.StatLogger; import com.android.server.EventLogTags; import com.android.server.LocalServices; Loading Loading @@ -3601,6 +3600,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { this, in, out, err, args, callback, resultReceiver); } void setDebugUid(int uid) { mLogger.setDebugUid(uid); } @VisibleForTesting boolean isUidForeground(int uid) { synchronized (mUidRulesFirstLock) { Loading
services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java +21 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.Context; import android.net.NetworkPolicyManager; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Process; import android.os.RemoteException; import android.os.ShellCommand; Loading Loading @@ -58,6 +59,10 @@ class NetworkPolicyManagerShellCommand extends ShellCommand { return runAdd(); case "remove": return runRemove(); case "start-watching": return runStartWatching(); case "stop-watching": return runStopWatching(); default: return handleDefaultCommands(cmd); } Loading Loading @@ -197,6 +202,22 @@ class NetworkPolicyManagerShellCommand extends ShellCommand { return -1; } private int runStartWatching() { final int uid = Integer.parseInt(getNextArgRequired()); if (uid < 0) { final PrintWriter pw = getOutPrintWriter(); pw.print("Invalid UID: "); pw.println(uid); return -1; } mInterface.setDebugUid(uid); return 0; } private int runStopWatching() { mInterface.setDebugUid(Process.INVALID_UID); return 0; } private int listUidPolicies(String msg, int policy) throws RemoteException { final int[] uids = mInterface.getUidsWithPolicy(policy); return listUidList(msg, uids); Loading