diff options
Diffstat (limited to 'services')
10 files changed, 211 insertions, 72 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index dd650bf..e396a69 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -884,22 +884,25 @@ private NetworkStateTracker makeWimaxStateTracker() { @Override public boolean isActiveNetworkMetered() { enforceAccessPermission(); - final long token = Binder.clearCallingIdentity(); try { - final NetworkState state = getNetworkStateUnchecked(mActiveDefaultNetwork); - if (state != null) { - try { - return mPolicyManager.isNetworkMetered(state); - } catch (RemoteException e) { - } - } - return false; + return isNetworkMeteredUnchecked(mActiveDefaultNetwork); } finally { Binder.restoreCallingIdentity(token); } } + private boolean isNetworkMeteredUnchecked(int networkType) { + final NetworkState state = getNetworkStateUnchecked(networkType); + if (state != null) { + try { + return mPolicyManager.isNetworkMetered(state); + } catch (RemoteException e) { + } + } + return false; + } + public boolean setRadios(boolean turnOn) { boolean result = true; enforceChangePermission(); @@ -993,7 +996,8 @@ private NetworkStateTracker makeWimaxStateTracker() { public int startUsingNetworkFeature(int networkType, String feature, IBinder binder) { if (VDBG) { - log("startUsingNetworkFeature for net " + networkType + ": " + feature); + log("startUsingNetworkFeature for net " + networkType + ": " + feature + ", uid=" + + Binder.getCallingUid()); } enforceChangePermission(); if (!ConnectivityManager.isNetworkTypeValid(networkType) || @@ -1010,6 +1014,16 @@ private NetworkStateTracker makeWimaxStateTracker() { enforceConnectivityInternalPermission(); } + // if UID is restricted, don't allow them to bring up metered APNs + final boolean networkMetered = isNetworkMeteredUnchecked(usedNetworkType); + final int uidRules; + synchronized (mRulesLock) { + uidRules = mUidRules.get(Binder.getCallingUid(), RULE_ALLOW_ALL); + } + if (networkMetered && (uidRules & RULE_REJECT_METERED) != 0) { + return Phone.APN_REQUEST_FAILED; + } + NetworkStateTracker network = mNetTrackers[usedNetworkType]; if (network != null) { Integer currentPid = new Integer(getCallingPid()); @@ -1432,7 +1446,6 @@ private NetworkStateTracker makeWimaxStateTracker() { mUidRules.put(uid, uidRules); } - // TODO: dispatch into NMS to push rules towards kernel module // TODO: notify UID when it has requested targeted updates } diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index 817d04d..4536a6d 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -989,9 +989,15 @@ public class NetworkManagementService extends INetworkManagementService.Stub } @Override - public NetworkStats getNetworkStatsSummary() { + public NetworkStats getNetworkStatsSummaryDev() { mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); - return mStatsFactory.readNetworkStatsSummary(); + return mStatsFactory.readNetworkStatsSummaryDev(); + } + + @Override + public NetworkStats getNetworkStatsSummaryXt() { + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + return mStatsFactory.readNetworkStatsSummaryXt(); } @Override diff --git a/services/java/com/android/server/ThrottleService.java b/services/java/com/android/server/ThrottleService.java index 2155147..f35a5af 100644 --- a/services/java/com/android/server/ThrottleService.java +++ b/services/java/com/android/server/ThrottleService.java @@ -511,7 +511,7 @@ public class ThrottleService extends IThrottleManager.Stub { long incRead = 0; long incWrite = 0; try { - final NetworkStats stats = mNMService.getNetworkStatsSummary(); + final NetworkStats stats = mNMService.getNetworkStatsSummaryDev(); final int index = stats.findIndex(mIface, NetworkStats.UID_ALL, NetworkStats.SET_DEFAULT, NetworkStats.TAG_NONE); diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java index 8ebe224..961d042 100644 --- a/services/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java @@ -118,6 +118,7 @@ import android.telephony.TelephonyManager; import android.text.format.Formatter; import android.text.format.Time; import android.util.Log; +import android.util.MathUtils; import android.util.NtpTrustedTime; import android.util.Slog; import android.util.SparseArray; @@ -166,7 +167,7 @@ import libcore.io.IoUtils; */ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final String TAG = "NetworkPolicy"; - private static final boolean LOGD = true; + private static final boolean LOGD = false; private static final boolean LOGV = false; private static final int VERSION_INIT = 1; @@ -962,6 +963,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } + long lowestRule = Long.MAX_VALUE; final HashSet<String> newMeteredIfaces = Sets.newHashSet(); // apply each policy that we found ifaces for; compute remaining data @@ -985,6 +987,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { + Arrays.toString(ifaces)); } + final boolean hasWarning = policy.warningBytes != LIMIT_DISABLED; final boolean hasLimit = policy.limitBytes != LIMIT_DISABLED; if (hasLimit || policy.metered) { final long quotaBytes; @@ -1014,6 +1017,23 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { newMeteredIfaces.add(iface); } } + + // keep track of lowest warning or limit of active policies + if (hasWarning && policy.warningBytes < lowestRule) { + lowestRule = policy.warningBytes; + } + if (hasLimit && policy.limitBytes < lowestRule) { + lowestRule = policy.limitBytes; + } + } + + try { + // make sure stats are recorded frequently enough; we aim for 2MB + // threshold for 2GB/month rules. + final long persistThreshold = lowestRule / 1000; + mNetworkStats.advisePersistThreshold(persistThreshold); + } catch (RemoteException e) { + // ignored; service lives in system_server } // remove quota on any trailing interfaces diff --git a/services/java/com/android/server/net/NetworkStatsCollection.java b/services/java/com/android/server/net/NetworkStatsCollection.java index 2892a74..c2e475a 100644 --- a/services/java/com/android/server/net/NetworkStatsCollection.java +++ b/services/java/com/android/server/net/NetworkStatsCollection.java @@ -186,12 +186,12 @@ public class NetworkStatsCollection implements FileRotator.Reader { if (history.size() == 0) return; noteRecordedHistory(history.getStart(), history.getEnd(), history.getTotalBytes()); - final NetworkStatsHistory existing = mStats.get(key); - if (existing != null) { - existing.recordEntireHistory(history); - } else { - mStats.put(key, history); + NetworkStatsHistory target = mStats.get(key); + if (target == null) { + target = new NetworkStatsHistory(history.getBucketDuration()); + mStats.put(key, target); } + target.recordEntireHistory(history); } /** diff --git a/services/java/com/android/server/net/NetworkStatsRecorder.java b/services/java/com/android/server/net/NetworkStatsRecorder.java index 57ad158..2ce7771 100644 --- a/services/java/com/android/server/net/NetworkStatsRecorder.java +++ b/services/java/com/android/server/net/NetworkStatsRecorder.java @@ -17,6 +17,8 @@ package com.android.server.net; import static android.net.NetworkStats.TAG_NONE; +import static android.net.TrafficStats.KB_IN_BYTES; +import static android.net.TrafficStats.MB_IN_BYTES; import static com.android.internal.util.Preconditions.checkNotNull; import android.net.NetworkStats; @@ -25,6 +27,7 @@ import android.net.NetworkStatsHistory; import android.net.NetworkTemplate; import android.net.TrafficStats; import android.util.Log; +import android.util.MathUtils; import android.util.Slog; import com.android.internal.util.FileRotator; @@ -58,9 +61,9 @@ public class NetworkStatsRecorder { private final String mCookie; private final long mBucketDuration; - private final long mPersistThresholdBytes; private final boolean mOnlyTags; + private long mPersistThresholdBytes = 2 * MB_IN_BYTES; private NetworkStats mLastSnapshot; private final NetworkStatsCollection mPending; @@ -71,13 +74,12 @@ public class NetworkStatsRecorder { private WeakReference<NetworkStatsCollection> mComplete; public NetworkStatsRecorder(FileRotator rotator, NonMonotonicObserver<String> observer, - String cookie, long bucketDuration, long persistThresholdBytes, boolean onlyTags) { + String cookie, long bucketDuration, boolean onlyTags) { mRotator = checkNotNull(rotator, "missing FileRotator"); mObserver = checkNotNull(observer, "missing NonMonotonicObserver"); mCookie = cookie; mBucketDuration = bucketDuration; - mPersistThresholdBytes = persistThresholdBytes; mOnlyTags = onlyTags; mPending = new NetworkStatsCollection(bucketDuration); @@ -86,6 +88,12 @@ public class NetworkStatsRecorder { mPendingRewriter = new CombiningRewriter(mPending); } + public void setPersistThreshold(long thresholdBytes) { + if (LOGV) Slog.v(TAG, "setPersistThreshold() with " + thresholdBytes); + mPersistThresholdBytes = MathUtils.constrain( + thresholdBytes, 1 * KB_IN_BYTES, 100 * MB_IN_BYTES); + } + public void resetLocked() { mLastSnapshot = null; mPending.reset(); @@ -128,6 +136,9 @@ public class NetworkStatsRecorder { Map<String, NetworkIdentitySet> ifaceIdent, long currentTimeMillis) { final HashSet<String> unknownIfaces = Sets.newHashSet(); + // skip recording when snapshot missing + if (snapshot == null) return; + // assume first snapshot is bootstrap and don't record if (mLastSnapshot == null) { mLastSnapshot = snapshot; @@ -150,7 +161,7 @@ public class NetworkStatsRecorder { continue; } - // skip when no delta occured + // skip when no delta occurred if (entry.isEmpty()) continue; // only record tag data when requested diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java index 1c3e24f..a9d4b59 100644 --- a/services/java/com/android/server/net/NetworkStatsService.java +++ b/services/java/com/android/server/net/NetworkStatsService.java @@ -36,6 +36,7 @@ import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; import static android.net.NetworkTemplate.buildTemplateMobileWildcard; import static android.net.NetworkTemplate.buildTemplateWifiWildcard; +import static android.net.TrafficStats.KB_IN_BYTES; import static android.net.TrafficStats.MB_IN_BYTES; import static android.provider.Settings.Secure.NETSTATS_DEV_BUCKET_DURATION; import static android.provider.Settings.Secure.NETSTATS_DEV_DELETE_AGE; @@ -49,6 +50,10 @@ import static android.provider.Settings.Secure.NETSTATS_UID_BUCKET_DURATION; import static android.provider.Settings.Secure.NETSTATS_UID_DELETE_AGE; import static android.provider.Settings.Secure.NETSTATS_UID_PERSIST_BYTES; import static android.provider.Settings.Secure.NETSTATS_UID_ROTATE_AGE; +import static android.provider.Settings.Secure.NETSTATS_UID_TAG_BUCKET_DURATION; +import static android.provider.Settings.Secure.NETSTATS_UID_TAG_DELETE_AGE; +import static android.provider.Settings.Secure.NETSTATS_UID_TAG_PERSIST_BYTES; +import static android.provider.Settings.Secure.NETSTATS_UID_TAG_ROTATE_AGE; import static android.telephony.PhoneStateListener.LISTEN_DATA_CONNECTION_STATE; import static android.telephony.PhoneStateListener.LISTEN_NONE; import static android.text.format.DateUtils.DAY_IN_MILLIS; @@ -94,10 +99,12 @@ import android.os.PowerManager; import android.os.RemoteException; import android.os.SystemClock; import android.provider.Settings; +import android.provider.Settings.Secure; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.EventLog; import android.util.Log; +import android.util.MathUtils; import android.util.NtpTrustedTime; import android.util.Slog; import android.util.SparseIntArray; @@ -159,6 +166,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { private PendingIntent mPollIntent; private static final String PREFIX_DEV = "dev"; + private static final String PREFIX_XT = "xt"; private static final String PREFIX_UID = "uid"; private static final String PREFIX_UID_TAG = "uid_tag"; @@ -168,27 +176,30 @@ public class NetworkStatsService extends INetworkStatsService.Stub { public interface NetworkStatsSettings { public long getPollInterval(); public long getTimeCacheMaxAge(); - public long getGlobalAlertBytes(); public boolean getSampleEnabled(); public static class Config { public final long bucketDuration; - public final long persistBytes; public final long rotateAgeMillis; public final long deleteAgeMillis; - public Config(long bucketDuration, long persistBytes, long rotateAgeMillis, - long deleteAgeMillis) { + public Config(long bucketDuration, long rotateAgeMillis, long deleteAgeMillis) { this.bucketDuration = bucketDuration; - this.persistBytes = persistBytes; this.rotateAgeMillis = rotateAgeMillis; this.deleteAgeMillis = deleteAgeMillis; } } public Config getDevConfig(); + public Config getXtConfig(); public Config getUidConfig(); public Config getUidTagConfig(); + + public long getGlobalAlertBytes(long def); + public long getDevPersistBytes(long def); + public long getXtPersistBytes(long def); + public long getUidPersistBytes(long def); + public long getUidTagPersistBytes(long def); } private final Object mStatsLock = new Object(); @@ -204,6 +215,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { new DropBoxNonMonotonicObserver(); private NetworkStatsRecorder mDevRecorder; + private NetworkStatsRecorder mXtRecorder; private NetworkStatsRecorder mUidRecorder; private NetworkStatsRecorder mUidTagRecorder; @@ -220,6 +232,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub { private final Handler mHandler; private boolean mSystemReady; + private long mPersistThreshold = 2 * MB_IN_BYTES; + private long mGlobalAlertBytes; public NetworkStatsService( Context context, INetworkManagementService networkManager, IAlarmManager alarmManager) { @@ -268,9 +282,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub { // create data recorders along with historical rotators mDevRecorder = buildRecorder(PREFIX_DEV, mSettings.getDevConfig(), false); + mXtRecorder = buildRecorder(PREFIX_XT, mSettings.getXtConfig(), false); mUidRecorder = buildRecorder(PREFIX_UID, mSettings.getUidConfig(), false); mUidTagRecorder = buildRecorder(PREFIX_UID_TAG, mSettings.getUidTagConfig(), true); + updatePersistThresholds(); + synchronized (mStatsLock) { // upgrade any legacy stats, migrating them to rotated files maybeUpgradeLegacyStatsLocked(); @@ -321,10 +338,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub { private NetworkStatsRecorder buildRecorder( String prefix, NetworkStatsSettings.Config config, boolean includeTags) { - return new NetworkStatsRecorder( - new FileRotator(mBaseDir, prefix, config.rotateAgeMillis, config.deleteAgeMillis), - mNonMonotonicObserver, prefix, config.bucketDuration, config.persistBytes, - includeTags); + return new NetworkStatsRecorder(new FileRotator( + mBaseDir, prefix, config.rotateAgeMillis, config.deleteAgeMillis), + mNonMonotonicObserver, prefix, config.bucketDuration, includeTags); } private void shutdownLocked() { @@ -343,10 +359,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub { // persist any pending stats mDevRecorder.forcePersistLocked(currentTime); + mXtRecorder.forcePersistLocked(currentTime); mUidRecorder.forcePersistLocked(currentTime); mUidTagRecorder.forcePersistLocked(currentTime); mDevRecorder = null; + mXtRecorder = null; mUidRecorder = null; mUidTagRecorder = null; @@ -408,8 +426,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { */ private void registerGlobalAlert() { try { - final long alertBytes = mSettings.getGlobalAlertBytes(); - mNetworkManager.setGlobalAlert(alertBytes); + mNetworkManager.setGlobalAlert(mGlobalAlertBytes); } catch (IllegalStateException e) { Slog.w(TAG, "problem registering for global alert: " + e); } catch (RemoteException e) { @@ -431,14 +448,18 @@ public class NetworkStatsService extends INetworkStatsService.Stub { private NetworkStatsCollection getUidComplete() { if (mUidComplete == null) { - mUidComplete = mUidRecorder.getOrLoadCompleteLocked(); + synchronized (mStatsLock) { + mUidComplete = mUidRecorder.getOrLoadCompleteLocked(); + } } return mUidComplete; } private NetworkStatsCollection getUidTagComplete() { if (mUidTagComplete == null) { - mUidTagComplete = mUidTagRecorder.getOrLoadCompleteLocked(); + synchronized (mStatsLock) { + mUidTagComplete = mUidTagRecorder.getOrLoadCompleteLocked(); + } } return mUidTagComplete; } @@ -578,6 +599,45 @@ public class NetworkStatsService extends INetworkStatsService.Stub { } } + @Override + public void advisePersistThreshold(long thresholdBytes) { + mContext.enforceCallingOrSelfPermission(MODIFY_NETWORK_ACCOUNTING, TAG); + assertBandwidthControlEnabled(); + + // clamp threshold into safe range + mPersistThreshold = MathUtils.constrain(thresholdBytes, 128 * KB_IN_BYTES, 2 * MB_IN_BYTES); + updatePersistThresholds(); + + if (LOGV) { + Slog.v(TAG, "advisePersistThreshold() given " + thresholdBytes + ", clamped to " + + mPersistThreshold); + } + + // persist if beyond new thresholds + final long currentTime = mTime.hasCache() ? mTime.currentTimeMillis() + : System.currentTimeMillis(); + mDevRecorder.maybePersistLocked(currentTime); + mXtRecorder.maybePersistLocked(currentTime); + mUidRecorder.maybePersistLocked(currentTime); + mUidTagRecorder.maybePersistLocked(currentTime); + + // re-arm global alert + registerGlobalAlert(); + } + + /** + * Update {@link NetworkStatsRecorder} and {@link #mGlobalAlertBytes} to + * reflect current {@link #mPersistThreshold} value. Always defers to + * {@link Secure} values when defined. + */ + private void updatePersistThresholds() { + mDevRecorder.setPersistThreshold(mSettings.getDevPersistBytes(mPersistThreshold)); + mXtRecorder.setPersistThreshold(mSettings.getXtPersistBytes(mPersistThreshold)); + mUidRecorder.setPersistThreshold(mSettings.getUidPersistBytes(mPersistThreshold)); + mUidTagRecorder.setPersistThreshold(mSettings.getUidTagPersistBytes(mPersistThreshold)); + mGlobalAlertBytes = mSettings.getGlobalAlertBytes(mPersistThreshold); + } + /** * Receiver that watches for {@link IConnectivityManager} to claim network * interfaces. Used to associate {@link TelephonyManager#getSubscriberId()} @@ -772,9 +832,11 @@ public class NetworkStatsService extends INetworkStatsService.Stub { // snapshot and record current counters; read UID stats first to // avoid overcounting dev stats. final NetworkStats uidSnapshot = getNetworkStatsUidDetail(); - final NetworkStats devSnapshot = getNetworkStatsSummary(); + final NetworkStats xtSnapshot = mNetworkManager.getNetworkStatsSummaryXt(); + final NetworkStats devSnapshot = mNetworkManager.getNetworkStatsSummaryDev(); mDevRecorder.recordSnapshotLocked(devSnapshot, mActiveIfaces, currentTime); + mXtRecorder.recordSnapshotLocked(xtSnapshot, mActiveIfaces, currentTime); mUidRecorder.recordSnapshotLocked(uidSnapshot, mActiveIfaces, currentTime); mUidTagRecorder.recordSnapshotLocked(uidSnapshot, mActiveIfaces, currentTime); @@ -824,9 +886,11 @@ public class NetworkStatsService extends INetworkStatsService.Stub { // snapshot and record current counters; read UID stats first to // avoid overcounting dev stats. final NetworkStats uidSnapshot = getNetworkStatsUidDetail(); - final NetworkStats devSnapshot = getNetworkStatsSummary(); + final NetworkStats xtSnapshot = mNetworkManager.getNetworkStatsSummaryXt(); + final NetworkStats devSnapshot = mNetworkManager.getNetworkStatsSummaryDev(); mDevRecorder.recordSnapshotLocked(devSnapshot, mActiveIfaces, currentTime); + mXtRecorder.recordSnapshotLocked(xtSnapshot, mActiveIfaces, currentTime); mUidRecorder.recordSnapshotLocked(uidSnapshot, mActiveIfaces, currentTime); mUidTagRecorder.recordSnapshotLocked(uidSnapshot, mActiveIfaces, currentTime); @@ -841,11 +905,13 @@ public class NetworkStatsService extends INetworkStatsService.Stub { // persist any pending data depending on requested flags if (persistForce) { mDevRecorder.forcePersistLocked(currentTime); + mXtRecorder.forcePersistLocked(currentTime); mUidRecorder.forcePersistLocked(currentTime); mUidTagRecorder.forcePersistLocked(currentTime); } else { if (persistNetwork) { mDevRecorder.maybePersistLocked(currentTime); + mXtRecorder.maybePersistLocked(currentTime); } if (persistUid) { mUidRecorder.maybePersistLocked(currentTime); @@ -884,7 +950,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { // collect mobile sample template = buildTemplateMobileWildcard(); devTotal = mDevRecorder.getTotalSinceBootLocked(template); - xtTotal = new NetworkStats.Entry(); + xtTotal = mXtRecorder.getTotalSinceBootLocked(template); uidTotal = mUidRecorder.getTotalSinceBootLocked(template); EventLogTags.writeNetstatsMobileSample( @@ -896,7 +962,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { // collect wifi sample template = buildTemplateWifiWildcard(); devTotal = mDevRecorder.getTotalSinceBootLocked(template); - xtTotal = new NetworkStats.Entry(); + xtTotal = mXtRecorder.getTotalSinceBootLocked(template); uidTotal = mUidRecorder.getTotalSinceBootLocked(template); EventLogTags.writeNetstatsWifiSample( @@ -970,6 +1036,11 @@ public class NetworkStatsService extends INetworkStatsService.Stub { mDevRecorder.dumpLocked(pw, fullHistory); pw.decreaseIndent(); + pw.println("Xt stats:"); + pw.increaseIndent(); + mXtRecorder.dumpLocked(pw, fullHistory); + pw.decreaseIndent(); + if (includeUid) { pw.println("UID stats:"); pw.increaseIndent(); @@ -986,10 +1057,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub { } } - private NetworkStats getNetworkStatsSummary() throws RemoteException { - return mNetworkManager.getNetworkStatsSummary(); - } - /** * Return snapshot of current UID statistics, including any * {@link TrafficStats#UID_TETHERING} and {@link #mUidOperations} values. @@ -1109,36 +1176,50 @@ public class NetworkStatsService extends INetworkStatsService.Stub { return getSecureLong(NETSTATS_TIME_CACHE_MAX_AGE, DAY_IN_MILLIS); } @Override - public long getGlobalAlertBytes() { - return getSecureLong(NETSTATS_GLOBAL_ALERT_BYTES, 2 * MB_IN_BYTES); + public long getGlobalAlertBytes(long def) { + return getSecureLong(NETSTATS_GLOBAL_ALERT_BYTES, def); } @Override public boolean getSampleEnabled() { return getSecureBoolean(NETSTATS_SAMPLE_ENABLED, true); } - @Override public Config getDevConfig() { return new Config(getSecureLong(NETSTATS_DEV_BUCKET_DURATION, HOUR_IN_MILLIS), - getSecureLong(NETSTATS_DEV_PERSIST_BYTES, 2 * MB_IN_BYTES), getSecureLong(NETSTATS_DEV_ROTATE_AGE, 15 * DAY_IN_MILLIS), getSecureLong(NETSTATS_DEV_DELETE_AGE, 90 * DAY_IN_MILLIS)); } - + @Override + public Config getXtConfig() { + return getDevConfig(); + } @Override public Config getUidConfig() { return new Config(getSecureLong(NETSTATS_UID_BUCKET_DURATION, 2 * HOUR_IN_MILLIS), - getSecureLong(NETSTATS_UID_PERSIST_BYTES, 2 * MB_IN_BYTES), getSecureLong(NETSTATS_UID_ROTATE_AGE, 15 * DAY_IN_MILLIS), getSecureLong(NETSTATS_UID_DELETE_AGE, 90 * DAY_IN_MILLIS)); } - @Override public Config getUidTagConfig() { - return new Config(getSecureLong(NETSTATS_UID_BUCKET_DURATION, 2 * HOUR_IN_MILLIS), - getSecureLong(NETSTATS_UID_PERSIST_BYTES, 2 * MB_IN_BYTES), - getSecureLong(NETSTATS_UID_ROTATE_AGE, 5 * DAY_IN_MILLIS), - getSecureLong(NETSTATS_UID_DELETE_AGE, 15 * DAY_IN_MILLIS)); + return new Config(getSecureLong(NETSTATS_UID_TAG_BUCKET_DURATION, 2 * HOUR_IN_MILLIS), + getSecureLong(NETSTATS_UID_TAG_ROTATE_AGE, 5 * DAY_IN_MILLIS), + getSecureLong(NETSTATS_UID_TAG_DELETE_AGE, 15 * DAY_IN_MILLIS)); + } + @Override + public long getDevPersistBytes(long def) { + return getSecureLong(NETSTATS_DEV_PERSIST_BYTES, def); + } + @Override + public long getXtPersistBytes(long def) { + return getDevPersistBytes(def); + } + @Override + public long getUidPersistBytes(long def) { + return getSecureLong(NETSTATS_UID_PERSIST_BYTES, def); + } + @Override + public long getUidTagPersistBytes(long def) { + return getSecureLong(NETSTATS_UID_TAG_PERSIST_BYTES, def); } } } diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index ba3fd3c..9b371ac 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -106,8 +106,9 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { private static final long TEST_START = 1194220800000L; private static final String TEST_IFACE = "test0"; + private static final String TEST_SSID = "AndroidAP"; - private static NetworkTemplate sTemplateWifi = NetworkTemplate.buildTemplateWifi(); + private static NetworkTemplate sTemplateWifi = NetworkTemplate.buildTemplateWifi(TEST_SSID); private BroadcastInterceptingContext mServiceContext; private File mPolicyDir; @@ -860,7 +861,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { info.setDetailedState(DetailedState.CONNECTED, null, null); final LinkProperties prop = new LinkProperties(); prop.setInterfaceName(TEST_IFACE); - return new NetworkState(info, prop, null); + return new NetworkState(info, prop, null, null, TEST_SSID); } private void expectCurrentTime() throws Exception { diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java index 6d9bb29..332d198 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java @@ -30,7 +30,7 @@ import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; import static android.net.NetworkStatsHistory.FIELD_ALL; import static android.net.NetworkTemplate.buildTemplateMobileAll; -import static android.net.NetworkTemplate.buildTemplateWifi; +import static android.net.NetworkTemplate.buildTemplateWifiWildcard; import static android.net.TrafficStats.MB_IN_BYTES; import static android.net.TrafficStats.UID_REMOVED; import static android.net.TrafficStats.UID_TETHERING; @@ -93,8 +93,9 @@ public class NetworkStatsServiceTest extends AndroidTestCase { private static final String IMSI_1 = "310004"; private static final String IMSI_2 = "310260"; + private static final String TEST_SSID = "AndroidAP"; - private static NetworkTemplate sTemplateWifi = buildTemplateWifi(); + private static NetworkTemplate sTemplateWifi = buildTemplateWifiWildcard(); private static NetworkTemplate sTemplateImsi1 = buildTemplateMobileAll(IMSI_1); private static NetworkTemplate sTemplateImsi2 = buildTemplateMobileAll(IMSI_2); @@ -136,7 +137,6 @@ public class NetworkStatsServiceTest extends AndroidTestCase { mService = new NetworkStatsService( mServiceContext, mNetManager, mAlarmManager, mTime, mStatsDir, mSettings); mService.bindConnectivityManager(mConnManager); - mSession = mService.openSession(); mElapsedRealtime = 0L; @@ -154,6 +154,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase { replay(); mService.systemReady(); + mSession = mService.openSession(); verifyAndReset(); mNetworkObserver = networkObserver.getValue(); @@ -162,9 +163,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase { @Override public void tearDown() throws Exception { - for (File file : mStatsDir.listFiles()) { - file.delete(); - } + IoUtils.deleteContents(mStatsDir); mServiceContext = null; mStatsDir = null; @@ -820,7 +819,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase { } private void expectNetworkStatsSummary(NetworkStats summary) throws Exception { - expect(mNetManager.getNetworkStatsSummary()).andReturn(summary).atLeastOnce(); + expect(mNetManager.getNetworkStatsSummaryDev()).andReturn(summary).atLeastOnce(); + expect(mNetManager.getNetworkStatsSummaryXt()).andReturn(summary).atLeastOnce(); } private void expectNetworkStatsUidDetail(NetworkStats detail) throws Exception { @@ -846,13 +846,19 @@ public class NetworkStatsServiceTest extends AndroidTestCase { throws Exception { expect(mSettings.getPollInterval()).andReturn(HOUR_IN_MILLIS).anyTimes(); expect(mSettings.getTimeCacheMaxAge()).andReturn(DAY_IN_MILLIS).anyTimes(); - expect(mSettings.getGlobalAlertBytes()).andReturn(MB_IN_BYTES).anyTimes(); expect(mSettings.getSampleEnabled()).andReturn(true).anyTimes(); - final Config config = new Config(bucketDuration, persistBytes, deleteAge, deleteAge); + final Config config = new Config(bucketDuration, deleteAge, deleteAge); expect(mSettings.getDevConfig()).andReturn(config).anyTimes(); + expect(mSettings.getXtConfig()).andReturn(config).anyTimes(); expect(mSettings.getUidConfig()).andReturn(config).anyTimes(); expect(mSettings.getUidTagConfig()).andReturn(config).anyTimes(); + + expect(mSettings.getGlobalAlertBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes(); + expect(mSettings.getDevPersistBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes(); + expect(mSettings.getXtPersistBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes(); + expect(mSettings.getUidPersistBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes(); + expect(mSettings.getUidTagPersistBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes(); } private void expectCurrentTime() throws Exception { @@ -903,7 +909,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase { info.setDetailedState(DetailedState.CONNECTED, null, null); final LinkProperties prop = new LinkProperties(); prop.setInterfaceName(TEST_IFACE); - return new NetworkState(info, prop, null); + return new NetworkState(info, prop, null, null, TEST_SSID); } private static NetworkState buildMobile3gState(String subscriberId) { @@ -912,7 +918,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase { info.setDetailedState(DetailedState.CONNECTED, null, null); final LinkProperties prop = new LinkProperties(); prop.setInterfaceName(TEST_IFACE); - return new NetworkState(info, prop, null, subscriberId); + return new NetworkState(info, prop, null, subscriberId, null); } private static NetworkState buildMobile4gState(String iface) { diff --git a/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java b/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java index 6a9778e..afa0eec 100644 --- a/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java @@ -232,7 +232,8 @@ public class ThrottleServiceTest extends AndroidTestCase { final INetworkManagementService nmService = INetworkManagementService.Stub.asInterface(b); // test is currently no-op, just exercises stats apis - Log.d(TAG, nmService.getNetworkStatsSummary().toString()); + Log.d(TAG, nmService.getNetworkStatsSummaryDev().toString()); + Log.d(TAG, nmService.getNetworkStatsSummaryXt().toString()); Log.d(TAG, nmService.getNetworkStatsDetail().toString()); } @@ -286,7 +287,7 @@ public class ThrottleServiceTest extends AndroidTestCase { } /** - * Expect {@link NetworkManagementService#getNetworkStatsSummary()} mock + * Expect {@link NetworkManagementService#getNetworkStatsSummaryDev()} mock * calls, responding with the given counter values. */ public void expectGetInterfaceCounter(long rx, long tx) throws Exception { @@ -294,7 +295,7 @@ public class ThrottleServiceTest extends AndroidTestCase { final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 1); stats.addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, rx, 0L, tx, 0L, 0); - expect(mMockNMService.getNetworkStatsSummary()).andReturn(stats).atLeastOnce(); + expect(mMockNMService.getNetworkStatsSummaryDev()).andReturn(stats).atLeastOnce(); } /** |