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 @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 public static int getDnsResolverSuccessThresholdPercent(@NonNull android.content.Context, int);
|
||||||
method @Nullable public static android.net.ProxyInfo getGlobalProxy(@NonNull android.content.Context);
|
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 @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 public static boolean getMobileDataAlwaysOn(@NonNull android.content.Context, boolean);
|
||||||
method @NonNull public static java.util.Set<java.lang.Integer> getMobileDataPreferredUids(@NonNull android.content.Context);
|
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 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 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 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 setMobileDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
|
||||||
method public static void setMobileDataAlwaysOn(@NonNull android.content.Context, boolean);
|
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>);
|
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 =
|
public static final String UIDS_ALLOWED_ON_RESTRICTED_NETWORKS =
|
||||||
"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}.
|
* 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,
|
Settings.Global.putString(context.getContentResolver(), UIDS_ALLOWED_ON_RESTRICTED_NETWORKS,
|
||||||
uids);
|
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.getDnsResolverSampleRanges
|
||||||
import android.net.ConnectivitySettingsManager.getDnsResolverSampleValidityDuration
|
import android.net.ConnectivitySettingsManager.getDnsResolverSampleValidityDuration
|
||||||
import android.net.ConnectivitySettingsManager.getDnsResolverSuccessThresholdPercent
|
import android.net.ConnectivitySettingsManager.getDnsResolverSuccessThresholdPercent
|
||||||
|
import android.net.ConnectivitySettingsManager.getIngressRateLimitInBytesPerSecond
|
||||||
import android.net.ConnectivitySettingsManager.getMobileDataActivityTimeout
|
import android.net.ConnectivitySettingsManager.getMobileDataActivityTimeout
|
||||||
import android.net.ConnectivitySettingsManager.getMobileDataAlwaysOn
|
import android.net.ConnectivitySettingsManager.getMobileDataAlwaysOn
|
||||||
import android.net.ConnectivitySettingsManager.getNetworkSwitchNotificationMaximumDailyCount
|
import android.net.ConnectivitySettingsManager.getNetworkSwitchNotificationMaximumDailyCount
|
||||||
@@ -51,6 +52,7 @@ import android.net.ConnectivitySettingsManager.setConnectivityKeepPendingIntentD
|
|||||||
import android.net.ConnectivitySettingsManager.setDnsResolverSampleRanges
|
import android.net.ConnectivitySettingsManager.setDnsResolverSampleRanges
|
||||||
import android.net.ConnectivitySettingsManager.setDnsResolverSampleValidityDuration
|
import android.net.ConnectivitySettingsManager.setDnsResolverSampleValidityDuration
|
||||||
import android.net.ConnectivitySettingsManager.setDnsResolverSuccessThresholdPercent
|
import android.net.ConnectivitySettingsManager.setDnsResolverSuccessThresholdPercent
|
||||||
|
import android.net.ConnectivitySettingsManager.setIngressRateLimitInBytesPerSecond
|
||||||
import android.net.ConnectivitySettingsManager.setMobileDataActivityTimeout
|
import android.net.ConnectivitySettingsManager.setMobileDataActivityTimeout
|
||||||
import android.net.ConnectivitySettingsManager.setMobileDataAlwaysOn
|
import android.net.ConnectivitySettingsManager.setMobileDataAlwaysOn
|
||||||
import android.net.ConnectivitySettingsManager.setNetworkSwitchNotificationMaximumDailyCount
|
import android.net.ConnectivitySettingsManager.setNetworkSwitchNotificationMaximumDailyCount
|
||||||
@@ -292,4 +294,19 @@ class ConnectivitySettingsManagerTest {
|
|||||||
setter = { setWifiAlwaysRequested(context, it) },
|
setter = { setWifiAlwaysRequested(context, it) },
|
||||||
testIntValues = intArrayOf(0))
|
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