Add setting that controls network rate limit
The INGRESS_RATE_LIMIT_BYTES_PER_SECOND setting controls the rate limit for internet networks. If set to -1, no rate limit applies. There is one global rate limit that will be applied to all networks with NET_CAPABILITY_INTERNET. Test: atest ConnectivitySettingsManagerTest Bug: 157552970 Change-Id: Ia82aa867686d484ce46734f76d4a48bf864eff84
This commit is contained in:
@@ -69,6 +69,7 @@ package android.net {
|
||||
method @NonNull public static java.time.Duration getDnsResolverSampleValidityDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
|
||||
method public static int getDnsResolverSuccessThresholdPercent(@NonNull android.content.Context, int);
|
||||
method @Nullable public static android.net.ProxyInfo getGlobalProxy(@NonNull android.content.Context);
|
||||
method public static long getIngressRateLimitInBytesPerSecond(@NonNull android.content.Context);
|
||||
method @NonNull public static java.time.Duration getMobileDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
|
||||
method public static boolean getMobileDataAlwaysOn(@NonNull android.content.Context, boolean);
|
||||
method @NonNull public static java.util.Set<java.lang.Integer> getMobileDataPreferredUids(@NonNull android.content.Context);
|
||||
@@ -89,6 +90,7 @@ package android.net {
|
||||
method public static void setDnsResolverSampleValidityDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
|
||||
method public static void setDnsResolverSuccessThresholdPercent(@NonNull android.content.Context, @IntRange(from=0, to=100) int);
|
||||
method public static void setGlobalProxy(@NonNull android.content.Context, @NonNull android.net.ProxyInfo);
|
||||
method public static void setIngressRateLimitInBytesPerSecond(@NonNull android.content.Context, @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) long);
|
||||
method public static void setMobileDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
|
||||
method public static void setMobileDataAlwaysOn(@NonNull android.content.Context, boolean);
|
||||
method public static void setMobileDataPreferredUids(@NonNull android.content.Context, @NonNull java.util.Set<java.lang.Integer>);
|
||||
|
||||
@@ -383,6 +383,14 @@ public class ConnectivitySettingsManager {
|
||||
public static final String UIDS_ALLOWED_ON_RESTRICTED_NETWORKS =
|
||||
"uids_allowed_on_restricted_networks";
|
||||
|
||||
/**
|
||||
* A global rate limit that applies to all networks with NET_CAPABILITY_INTERNET when enabled.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final String INGRESS_RATE_LIMIT_BYTES_PER_SECOND =
|
||||
"ingress_rate_limit_bytes_per_second";
|
||||
|
||||
/**
|
||||
* Get mobile data activity timeout from {@link Settings}.
|
||||
*
|
||||
@@ -1071,4 +1079,37 @@ public class ConnectivitySettingsManager {
|
||||
Settings.Global.putString(context.getContentResolver(), UIDS_ALLOWED_ON_RESTRICTED_NETWORKS,
|
||||
uids);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global network bandwidth rate limit.
|
||||
*
|
||||
* The limit is only applicable to networks that provide internet connectivity. If the setting
|
||||
* is unset, it defaults to -1.
|
||||
*
|
||||
* @param context The {@link Context} to query the setting.
|
||||
* @return The rate limit in number of bytes per second or -1 if disabled.
|
||||
*/
|
||||
public static long getIngressRateLimitInBytesPerSecond(@NonNull Context context) {
|
||||
return Settings.Global.getLong(context.getContentResolver(),
|
||||
INGRESS_RATE_LIMIT_BYTES_PER_SECOND, -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the global network bandwidth rate limit.
|
||||
*
|
||||
* The limit is only applicable to networks that provide internet connectivity.
|
||||
*
|
||||
* @param context The {@link Context} to set the setting.
|
||||
* @param rateLimitInBytesPerSec The rate limit in number of bytes per second or -1 to disable.
|
||||
*/
|
||||
public static void setIngressRateLimitInBytesPerSecond(@NonNull Context context,
|
||||
@IntRange(from = -1, to = Integer.MAX_VALUE) long rateLimitInBytesPerSec) {
|
||||
if (rateLimitInBytesPerSec < -1) {
|
||||
throw new IllegalArgumentException(
|
||||
"Rate limit must be within the range [-1, Integer.MAX_VALUE]");
|
||||
}
|
||||
Settings.Global.putLong(context.getContentResolver(),
|
||||
INGRESS_RATE_LIMIT_BYTES_PER_SECOND,
|
||||
rateLimitInBytesPerSec);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ import android.net.ConnectivitySettingsManager.getConnectivityKeepPendingIntentD
|
||||
import android.net.ConnectivitySettingsManager.getDnsResolverSampleRanges
|
||||
import android.net.ConnectivitySettingsManager.getDnsResolverSampleValidityDuration
|
||||
import android.net.ConnectivitySettingsManager.getDnsResolverSuccessThresholdPercent
|
||||
import android.net.ConnectivitySettingsManager.getIngressRateLimitInBytesPerSecond
|
||||
import android.net.ConnectivitySettingsManager.getMobileDataActivityTimeout
|
||||
import android.net.ConnectivitySettingsManager.getMobileDataAlwaysOn
|
||||
import android.net.ConnectivitySettingsManager.getNetworkSwitchNotificationMaximumDailyCount
|
||||
@@ -51,6 +52,7 @@ import android.net.ConnectivitySettingsManager.setConnectivityKeepPendingIntentD
|
||||
import android.net.ConnectivitySettingsManager.setDnsResolverSampleRanges
|
||||
import android.net.ConnectivitySettingsManager.setDnsResolverSampleValidityDuration
|
||||
import android.net.ConnectivitySettingsManager.setDnsResolverSuccessThresholdPercent
|
||||
import android.net.ConnectivitySettingsManager.setIngressRateLimitInBytesPerSecond
|
||||
import android.net.ConnectivitySettingsManager.setMobileDataActivityTimeout
|
||||
import android.net.ConnectivitySettingsManager.setMobileDataAlwaysOn
|
||||
import android.net.ConnectivitySettingsManager.setNetworkSwitchNotificationMaximumDailyCount
|
||||
@@ -292,4 +294,19 @@ class ConnectivitySettingsManagerTest {
|
||||
setter = { setWifiAlwaysRequested(context, it) },
|
||||
testIntValues = intArrayOf(0))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testInternetNetworkRateLimitInBytesPerSecond() {
|
||||
val defaultRate = getIngressRateLimitInBytesPerSecond(context)
|
||||
val testRate = 1000L
|
||||
setIngressRateLimitInBytesPerSecond(context, testRate)
|
||||
assertEquals(testRate, getIngressRateLimitInBytesPerSecond(context))
|
||||
|
||||
setIngressRateLimitInBytesPerSecond(context, defaultRate)
|
||||
assertEquals(defaultRate, getIngressRateLimitInBytesPerSecond(context))
|
||||
|
||||
assertFailsWith<IllegalArgumentException>("Expected failure, but setting accepted") {
|
||||
setIngressRateLimitInBytesPerSecond(context, -10)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user