Loading core/java/android/net/NetworkPolicy.java +19 −20 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static android.net.NetworkTemplate.MATCH_CARRIER; import static android.net.NetworkTemplate.MATCH_ETHERNET; import static android.net.NetworkTemplate.MATCH_MOBILE; import static android.net.NetworkTemplate.MATCH_WIFI; import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; import android.annotation.NonNull; import android.annotation.Nullable; Loading @@ -45,6 +44,7 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Iterator; import java.util.Objects; import java.util.Set; /** * Policy for networks matching a {@link NetworkTemplate}, including usage cycle Loading @@ -62,15 +62,16 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { * Initial Version of the NetworkTemplate backup serializer. */ private static final int TEMPLATE_BACKUP_VERSION_1_INIT = 1; private static final int TEMPLATE_BACKUP_VERSION_2_UNSUPPORTED = 2; /** * Version of the NetworkTemplate backup serializer that added carrier template support. */ private static final int TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE = 2; private static final int TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE = 3; /** * Latest Version of the NetworkTemplate Backup Serializer. */ private static final int TEMPLATE_BACKUP_VERSION_LATEST = TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE; TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE; public static final int CYCLE_NONE = -1; public static final long WARNING_DISABLED = -1; Loading Loading @@ -337,10 +338,9 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { out.writeInt(TEMPLATE_BACKUP_VERSION_LATEST); out.writeInt(template.getMatchRule()); BackupUtils.writeString(out, template.getSubscriberId()); BackupUtils.writeString(out, template.getNetworkId()); BackupUtils.writeString(out, template.getSubscriberIds().iterator().next()); BackupUtils.writeString(out, template.getWifiNetworkKey()); out.writeInt(template.getMeteredness()); out.writeInt(template.getSubscriberIdMatchRule()); return baos.toByteArray(); } Loading @@ -349,33 +349,32 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { private static NetworkTemplate getNetworkTemplateFromBackup(DataInputStream in) throws IOException, BackupUtils.BadVersionException { int version = in.readInt(); if (version < TEMPLATE_BACKUP_VERSION_1_INIT || version > TEMPLATE_BACKUP_VERSION_LATEST) { if (version < TEMPLATE_BACKUP_VERSION_1_INIT || version > TEMPLATE_BACKUP_VERSION_LATEST || version == TEMPLATE_BACKUP_VERSION_2_UNSUPPORTED) { throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version"); } int matchRule = in.readInt(); final String subscriberId = BackupUtils.readString(in); final String networkId = BackupUtils.readString(in); final String wifiNetworkKey = BackupUtils.readString(in); final int metered; final int subscriberIdMatchRule; if (version >= TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE) { if (version >= TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE) { metered = in.readInt(); subscriberIdMatchRule = in.readInt(); } else { // For backward compatibility, fill the missing filters from match rules. metered = (matchRule == MATCH_MOBILE || matchRule == NetworkTemplate.MATCH_MOBILE_WILDCARD || matchRule == MATCH_CARRIER) ? METERED_YES : METERED_ALL; subscriberIdMatchRule = SUBSCRIBER_ID_MATCH_RULE_EXACT; metered = (matchRule == MATCH_MOBILE || matchRule == MATCH_CARRIER) ? METERED_YES : METERED_ALL; } try { return new NetworkTemplate(matchRule, subscriberId, new String[]{subscriberId}, networkId, metered, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL, NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule); final NetworkTemplate.Builder builder = new NetworkTemplate.Builder(matchRule) .setWifiNetworkKey(wifiNetworkKey) .setMeteredness(metered); if (subscriberId != null) { builder.setSubscriberIds(Set.of(subscriberId)); } return builder.build(); } catch (IllegalArgumentException e) { throw new BackupUtils.BadVersionException( "Restored network template contains unknown match rule " + matchRule, e); Loading packages/ConnectivityT/framework-t/src/android/net/NetworkTemplate.java +15 −42 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import android.util.ArraySet; import com.android.internal.util.ArrayUtils; import com.android.net.module.util.NetworkIdentityUtils; import com.android.net.module.util.NetworkStatsUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading Loading @@ -114,27 +115,6 @@ public final class NetworkTemplate implements Parcelable { */ public static final int MATCH_CARRIER = 10; /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "SUBSCRIBER_ID_MATCH_RULE_" }, value = { SUBSCRIBER_ID_MATCH_RULE_EXACT, SUBSCRIBER_ID_MATCH_RULE_ALL }) public @interface SubscriberIdMatchRule{} /** * Value of the match rule of the subscriberId to match networks with specific subscriberId. * * @hide */ public static final int SUBSCRIBER_ID_MATCH_RULE_EXACT = 0; /** * Value of the match rule of the subscriberId to match networks with any subscriberId which * includes null and non-null. * * @hide */ public static final int SUBSCRIBER_ID_MATCH_RULE_ALL = 1; // TODO: Remove this and replace all callers with WIFI_NETWORK_KEY_ALL. /** @hide */ public static final String WIFI_NETWORKID_ALL = null; Loading Loading @@ -235,11 +215,11 @@ public final class NetworkTemplate implements Parcelable { if (TextUtils.isEmpty(subscriberId)) { return new NetworkTemplate(MATCH_MOBILE_WILDCARD, null, null, null, metered, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } return new NetworkTemplate(MATCH_MOBILE, subscriberId, new String[]{subscriberId}, null, metered, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** Loading Loading @@ -285,7 +265,7 @@ public final class NetworkTemplate implements Parcelable { new String[] { null } /* matchSubscriberIds */, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL); } /** Loading @@ -302,7 +282,7 @@ public final class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_WIFI, subscriberId, new String[] { subscriberId }, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** Loading Loading @@ -346,7 +326,7 @@ public final class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_CARRIER, subscriberId, new String[] { subscriberId }, null /* networkId */, METERED_YES, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } private final int mMatchRule; Loading Loading @@ -384,7 +364,7 @@ public final class NetworkTemplate implements Parcelable { case MATCH_MOBILE: case MATCH_CARRIER: // MOBILE and CARRIER templates must always specify a subscriber ID. if (subscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) { if (subscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL) { throw new IllegalArgumentException("Invalid SubscriberIdMatchRule " + "on match rule: " + getMatchRuleName(matchRule)); } Loading @@ -411,7 +391,7 @@ public final class NetworkTemplate implements Parcelable { this(matchRule, subscriberId, matchSubscriberIds, networkId, (matchRule == MATCH_MOBILE || matchRule == MATCH_MOBILE_WILDCARD) ? METERED_YES : METERED_ALL , ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); OEM_MANAGED_ALL, NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** @hide */ Loading @@ -420,7 +400,8 @@ public final class NetworkTemplate implements Parcelable { String networkId, int metered, int roaming, int defaultNetwork, int subType, int oemManaged) { this(matchRule, subscriberId, matchSubscriberIds, networkId, metered, roaming, defaultNetwork, subType, oemManaged, SUBSCRIBER_ID_MATCH_RULE_EXACT); defaultNetwork, subType, oemManaged, NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** @hide */ Loading Loading @@ -539,9 +520,9 @@ public final class NetworkTemplate implements Parcelable { private static String subscriberIdMatchRuleToString(int rule) { switch (rule) { case SUBSCRIBER_ID_MATCH_RULE_EXACT: case NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT: return "EXACT_MATCH"; case SUBSCRIBER_ID_MATCH_RULE_ALL: case NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL: return "ALL"; default: return "Unknown rule " + rule; Loading Loading @@ -608,15 +589,6 @@ public final class NetworkTemplate implements Parcelable { return mNetworkId; } /** * Get Subscriber Id Match Rule of the template. * * @hide */ public int getSubscriberIdMatchRule() { return mSubscriberIdMatchRule; } /** * Get meteredness filter of the template. */ Loading Loading @@ -730,7 +702,7 @@ public final class NetworkTemplate implements Parcelable { * @hide */ public boolean matchesSubscriberId(@Nullable String subscriberId) { return mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL return mSubscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL || ArrayUtils.contains(mMatchSubscriberIds, subscriberId); } Loading Loading @@ -1176,7 +1148,8 @@ public final class NetworkTemplate implements Parcelable { public NetworkTemplate build() { assertRequestableParameters(); final int subscriberIdMatchRule = mMatchSubscriberIds.isEmpty() ? SUBSCRIBER_ID_MATCH_RULE_ALL : SUBSCRIBER_ID_MATCH_RULE_EXACT; ? NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL : NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT; return new NetworkTemplate(getWildcardDeducedMatchRule(), mMatchSubscriberIds.isEmpty() ? null : mMatchSubscriberIds.iterator().next(), mMatchSubscriberIds.toArray(new String[0]), Loading services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java +9 −8 Original line number Diff line number Diff line Loading @@ -25,9 +25,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkPolicy.LIMIT_DISABLED; import static android.net.NetworkPolicy.WARNING_DISABLED; import static android.net.NetworkTemplate.NETWORK_TYPE_ALL; import static android.net.NetworkTemplate.OEM_MANAGED_ALL; import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; import static android.provider.Settings.Global.NETWORK_DEFAULT_DAILY_MULTIPATH_QUOTA_BYTES; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading Loading @@ -77,6 +75,8 @@ import java.time.ZoneId; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; Loading Loading @@ -224,12 +224,13 @@ public class MultipathPolicyTracker { "Can't get TelephonyManager for subId %d", subId)); } subscriberId = tele.getSubscriberId(); mNetworkTemplate = new NetworkTemplate( NetworkTemplate.MATCH_MOBILE, subscriberId, new String[] { subscriberId }, null, NetworkStats.METERED_YES, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_NO, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); subscriberId = Objects.requireNonNull(tele.getSubscriberId(), "Null subscriber Id for subId " + subId); mNetworkTemplate = new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE) .setSubscriberIds(Set.of(subscriberId)) .setMeteredness(NetworkStats.METERED_YES) .setDefaultNetworkStatus(NetworkStats.DEFAULT_NETWORK_NO) .build(); mUsageCallback = new UsageCallback() { @Override public void onThresholdReached(int networkType, String subscriberId) { Loading services/core/java/com/android/server/net/NetworkPolicyManagerService.java +18 −8 Original line number Diff line number Diff line Loading @@ -255,6 +255,7 @@ import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.StatLogger; import com.android.internal.util.XmlUtils; import com.android.net.module.util.NetworkIdentityUtils; import com.android.net.module.util.NetworkStatsUtils; import com.android.net.module.util.PermissionUtils; import com.android.server.EventLogTags; import com.android.server.LocalServices; Loading Loading @@ -2388,7 +2389,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { templateMeteredness = readIntAttribute(in, ATTR_TEMPLATE_METERED); } else { subscriberIdMatchRule = NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; subscriberIdMatchRule = NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT; if (templateType == MATCH_MOBILE) { Log.d(TAG, "Update template match rule from mobile to carrier and" + " force to metered"); Loading Loading @@ -2451,11 +2453,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } else { inferred = false; } final NetworkTemplate template = new NetworkTemplate(templateType, subscriberId, new String[] { subscriberId }, networkId, templateMeteredness, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL, NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule); final NetworkTemplate.Builder builder = new NetworkTemplate.Builder(templateType) .setWifiNetworkKey(networkId) .setMeteredness(templateMeteredness); if (subscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT) { final ArraySet<String> ids = new ArraySet<>(); ids.add(subscriberId); builder.setSubscriberIds(ids); } final NetworkTemplate template = builder.build(); if (NetworkPolicy.isTemplatePersistable(template)) { mNetworkPolicy.put(template, new NetworkPolicy(template, cycleRule, warningBytes, limitBytes, lastWarningSnooze, Loading Loading @@ -2671,8 +2679,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { if (subscriberId != null) { out.attribute(null, ATTR_SUBSCRIBER_ID, subscriberId); } writeIntAttribute(out, ATTR_SUBSCRIBER_ID_MATCH_RULE, template.getSubscriberIdMatchRule()); final int subscriberIdMatchRule = template.getSubscriberIds().isEmpty() ? NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL : NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT; writeIntAttribute(out, ATTR_SUBSCRIBER_ID_MATCH_RULE, subscriberIdMatchRule); final String networkId = template.getNetworkId(); if (networkId != null) { out.attribute(null, ATTR_NETWORK_ID, networkId); Loading services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +4 −6 Original line number Diff line number Diff line Loading @@ -1986,9 +1986,8 @@ public class NetworkPolicyManagerServiceTest { assertEquals("Unexpected template match rule in network policies", NetworkTemplate.MATCH_CARRIER, actualPolicy.template.getMatchRule()); assertEquals("Unexpected subscriberId match rule in network policies", NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT, actualPolicy.template.getSubscriberIdMatchRule()); assertTrue("Unexpected subscriberIds size in network policies", actualPolicy.template.getSubscriberIds().size() > 0); assertEquals("Unexpected template meteredness in network policies", METERED_YES, actualPolicy.template.getMeteredness()); } Loading @@ -2003,9 +2002,8 @@ public class NetworkPolicyManagerServiceTest { assertEquals("Unexpected template match rule in network policies", NetworkTemplate.MATCH_WIFI, actualPolicy.template.getMatchRule()); assertEquals("Unexpected subscriberId match rule in network policies", NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_ALL, actualPolicy.template.getSubscriberIdMatchRule()); assertEquals("Unexpected subscriberIds size in network policies", actualPolicy.template.getSubscriberIds().size(), 0); assertEquals("Unexpected template meteredness in network policies", METERED_NO, actualPolicy.template.getMeteredness()); } Loading Loading
core/java/android/net/NetworkPolicy.java +19 −20 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static android.net.NetworkTemplate.MATCH_CARRIER; import static android.net.NetworkTemplate.MATCH_ETHERNET; import static android.net.NetworkTemplate.MATCH_MOBILE; import static android.net.NetworkTemplate.MATCH_WIFI; import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; import android.annotation.NonNull; import android.annotation.Nullable; Loading @@ -45,6 +44,7 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Iterator; import java.util.Objects; import java.util.Set; /** * Policy for networks matching a {@link NetworkTemplate}, including usage cycle Loading @@ -62,15 +62,16 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { * Initial Version of the NetworkTemplate backup serializer. */ private static final int TEMPLATE_BACKUP_VERSION_1_INIT = 1; private static final int TEMPLATE_BACKUP_VERSION_2_UNSUPPORTED = 2; /** * Version of the NetworkTemplate backup serializer that added carrier template support. */ private static final int TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE = 2; private static final int TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE = 3; /** * Latest Version of the NetworkTemplate Backup Serializer. */ private static final int TEMPLATE_BACKUP_VERSION_LATEST = TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE; TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE; public static final int CYCLE_NONE = -1; public static final long WARNING_DISABLED = -1; Loading Loading @@ -337,10 +338,9 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { out.writeInt(TEMPLATE_BACKUP_VERSION_LATEST); out.writeInt(template.getMatchRule()); BackupUtils.writeString(out, template.getSubscriberId()); BackupUtils.writeString(out, template.getNetworkId()); BackupUtils.writeString(out, template.getSubscriberIds().iterator().next()); BackupUtils.writeString(out, template.getWifiNetworkKey()); out.writeInt(template.getMeteredness()); out.writeInt(template.getSubscriberIdMatchRule()); return baos.toByteArray(); } Loading @@ -349,33 +349,32 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { private static NetworkTemplate getNetworkTemplateFromBackup(DataInputStream in) throws IOException, BackupUtils.BadVersionException { int version = in.readInt(); if (version < TEMPLATE_BACKUP_VERSION_1_INIT || version > TEMPLATE_BACKUP_VERSION_LATEST) { if (version < TEMPLATE_BACKUP_VERSION_1_INIT || version > TEMPLATE_BACKUP_VERSION_LATEST || version == TEMPLATE_BACKUP_VERSION_2_UNSUPPORTED) { throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version"); } int matchRule = in.readInt(); final String subscriberId = BackupUtils.readString(in); final String networkId = BackupUtils.readString(in); final String wifiNetworkKey = BackupUtils.readString(in); final int metered; final int subscriberIdMatchRule; if (version >= TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE) { if (version >= TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE) { metered = in.readInt(); subscriberIdMatchRule = in.readInt(); } else { // For backward compatibility, fill the missing filters from match rules. metered = (matchRule == MATCH_MOBILE || matchRule == NetworkTemplate.MATCH_MOBILE_WILDCARD || matchRule == MATCH_CARRIER) ? METERED_YES : METERED_ALL; subscriberIdMatchRule = SUBSCRIBER_ID_MATCH_RULE_EXACT; metered = (matchRule == MATCH_MOBILE || matchRule == MATCH_CARRIER) ? METERED_YES : METERED_ALL; } try { return new NetworkTemplate(matchRule, subscriberId, new String[]{subscriberId}, networkId, metered, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL, NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule); final NetworkTemplate.Builder builder = new NetworkTemplate.Builder(matchRule) .setWifiNetworkKey(wifiNetworkKey) .setMeteredness(metered); if (subscriberId != null) { builder.setSubscriberIds(Set.of(subscriberId)); } return builder.build(); } catch (IllegalArgumentException e) { throw new BackupUtils.BadVersionException( "Restored network template contains unknown match rule " + matchRule, e); Loading
packages/ConnectivityT/framework-t/src/android/net/NetworkTemplate.java +15 −42 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import android.util.ArraySet; import com.android.internal.util.ArrayUtils; import com.android.net.module.util.NetworkIdentityUtils; import com.android.net.module.util.NetworkStatsUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading Loading @@ -114,27 +115,6 @@ public final class NetworkTemplate implements Parcelable { */ public static final int MATCH_CARRIER = 10; /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "SUBSCRIBER_ID_MATCH_RULE_" }, value = { SUBSCRIBER_ID_MATCH_RULE_EXACT, SUBSCRIBER_ID_MATCH_RULE_ALL }) public @interface SubscriberIdMatchRule{} /** * Value of the match rule of the subscriberId to match networks with specific subscriberId. * * @hide */ public static final int SUBSCRIBER_ID_MATCH_RULE_EXACT = 0; /** * Value of the match rule of the subscriberId to match networks with any subscriberId which * includes null and non-null. * * @hide */ public static final int SUBSCRIBER_ID_MATCH_RULE_ALL = 1; // TODO: Remove this and replace all callers with WIFI_NETWORK_KEY_ALL. /** @hide */ public static final String WIFI_NETWORKID_ALL = null; Loading Loading @@ -235,11 +215,11 @@ public final class NetworkTemplate implements Parcelable { if (TextUtils.isEmpty(subscriberId)) { return new NetworkTemplate(MATCH_MOBILE_WILDCARD, null, null, null, metered, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } return new NetworkTemplate(MATCH_MOBILE, subscriberId, new String[]{subscriberId}, null, metered, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** Loading Loading @@ -285,7 +265,7 @@ public final class NetworkTemplate implements Parcelable { new String[] { null } /* matchSubscriberIds */, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL); } /** Loading @@ -302,7 +282,7 @@ public final class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_WIFI, subscriberId, new String[] { subscriberId }, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** Loading Loading @@ -346,7 +326,7 @@ public final class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_CARRIER, subscriberId, new String[] { subscriberId }, null /* networkId */, METERED_YES, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } private final int mMatchRule; Loading Loading @@ -384,7 +364,7 @@ public final class NetworkTemplate implements Parcelable { case MATCH_MOBILE: case MATCH_CARRIER: // MOBILE and CARRIER templates must always specify a subscriber ID. if (subscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) { if (subscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL) { throw new IllegalArgumentException("Invalid SubscriberIdMatchRule " + "on match rule: " + getMatchRuleName(matchRule)); } Loading @@ -411,7 +391,7 @@ public final class NetworkTemplate implements Parcelable { this(matchRule, subscriberId, matchSubscriberIds, networkId, (matchRule == MATCH_MOBILE || matchRule == MATCH_MOBILE_WILDCARD) ? METERED_YES : METERED_ALL , ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); OEM_MANAGED_ALL, NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** @hide */ Loading @@ -420,7 +400,8 @@ public final class NetworkTemplate implements Parcelable { String networkId, int metered, int roaming, int defaultNetwork, int subType, int oemManaged) { this(matchRule, subscriberId, matchSubscriberIds, networkId, metered, roaming, defaultNetwork, subType, oemManaged, SUBSCRIBER_ID_MATCH_RULE_EXACT); defaultNetwork, subType, oemManaged, NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** @hide */ Loading Loading @@ -539,9 +520,9 @@ public final class NetworkTemplate implements Parcelable { private static String subscriberIdMatchRuleToString(int rule) { switch (rule) { case SUBSCRIBER_ID_MATCH_RULE_EXACT: case NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT: return "EXACT_MATCH"; case SUBSCRIBER_ID_MATCH_RULE_ALL: case NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL: return "ALL"; default: return "Unknown rule " + rule; Loading Loading @@ -608,15 +589,6 @@ public final class NetworkTemplate implements Parcelable { return mNetworkId; } /** * Get Subscriber Id Match Rule of the template. * * @hide */ public int getSubscriberIdMatchRule() { return mSubscriberIdMatchRule; } /** * Get meteredness filter of the template. */ Loading Loading @@ -730,7 +702,7 @@ public final class NetworkTemplate implements Parcelable { * @hide */ public boolean matchesSubscriberId(@Nullable String subscriberId) { return mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL return mSubscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL || ArrayUtils.contains(mMatchSubscriberIds, subscriberId); } Loading Loading @@ -1176,7 +1148,8 @@ public final class NetworkTemplate implements Parcelable { public NetworkTemplate build() { assertRequestableParameters(); final int subscriberIdMatchRule = mMatchSubscriberIds.isEmpty() ? SUBSCRIBER_ID_MATCH_RULE_ALL : SUBSCRIBER_ID_MATCH_RULE_EXACT; ? NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL : NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT; return new NetworkTemplate(getWildcardDeducedMatchRule(), mMatchSubscriberIds.isEmpty() ? null : mMatchSubscriberIds.iterator().next(), mMatchSubscriberIds.toArray(new String[0]), Loading
services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java +9 −8 Original line number Diff line number Diff line Loading @@ -25,9 +25,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkPolicy.LIMIT_DISABLED; import static android.net.NetworkPolicy.WARNING_DISABLED; import static android.net.NetworkTemplate.NETWORK_TYPE_ALL; import static android.net.NetworkTemplate.OEM_MANAGED_ALL; import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; import static android.provider.Settings.Global.NETWORK_DEFAULT_DAILY_MULTIPATH_QUOTA_BYTES; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading Loading @@ -77,6 +75,8 @@ import java.time.ZoneId; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; Loading Loading @@ -224,12 +224,13 @@ public class MultipathPolicyTracker { "Can't get TelephonyManager for subId %d", subId)); } subscriberId = tele.getSubscriberId(); mNetworkTemplate = new NetworkTemplate( NetworkTemplate.MATCH_MOBILE, subscriberId, new String[] { subscriberId }, null, NetworkStats.METERED_YES, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_NO, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); subscriberId = Objects.requireNonNull(tele.getSubscriberId(), "Null subscriber Id for subId " + subId); mNetworkTemplate = new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE) .setSubscriberIds(Set.of(subscriberId)) .setMeteredness(NetworkStats.METERED_YES) .setDefaultNetworkStatus(NetworkStats.DEFAULT_NETWORK_NO) .build(); mUsageCallback = new UsageCallback() { @Override public void onThresholdReached(int networkType, String subscriberId) { Loading
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +18 −8 Original line number Diff line number Diff line Loading @@ -255,6 +255,7 @@ import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.StatLogger; import com.android.internal.util.XmlUtils; import com.android.net.module.util.NetworkIdentityUtils; import com.android.net.module.util.NetworkStatsUtils; import com.android.net.module.util.PermissionUtils; import com.android.server.EventLogTags; import com.android.server.LocalServices; Loading Loading @@ -2388,7 +2389,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { templateMeteredness = readIntAttribute(in, ATTR_TEMPLATE_METERED); } else { subscriberIdMatchRule = NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; subscriberIdMatchRule = NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT; if (templateType == MATCH_MOBILE) { Log.d(TAG, "Update template match rule from mobile to carrier and" + " force to metered"); Loading Loading @@ -2451,11 +2453,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } else { inferred = false; } final NetworkTemplate template = new NetworkTemplate(templateType, subscriberId, new String[] { subscriberId }, networkId, templateMeteredness, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL, NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule); final NetworkTemplate.Builder builder = new NetworkTemplate.Builder(templateType) .setWifiNetworkKey(networkId) .setMeteredness(templateMeteredness); if (subscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT) { final ArraySet<String> ids = new ArraySet<>(); ids.add(subscriberId); builder.setSubscriberIds(ids); } final NetworkTemplate template = builder.build(); if (NetworkPolicy.isTemplatePersistable(template)) { mNetworkPolicy.put(template, new NetworkPolicy(template, cycleRule, warningBytes, limitBytes, lastWarningSnooze, Loading Loading @@ -2671,8 +2679,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { if (subscriberId != null) { out.attribute(null, ATTR_SUBSCRIBER_ID, subscriberId); } writeIntAttribute(out, ATTR_SUBSCRIBER_ID_MATCH_RULE, template.getSubscriberIdMatchRule()); final int subscriberIdMatchRule = template.getSubscriberIds().isEmpty() ? NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL : NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT; writeIntAttribute(out, ATTR_SUBSCRIBER_ID_MATCH_RULE, subscriberIdMatchRule); final String networkId = template.getNetworkId(); if (networkId != null) { out.attribute(null, ATTR_NETWORK_ID, networkId); Loading
services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +4 −6 Original line number Diff line number Diff line Loading @@ -1986,9 +1986,8 @@ public class NetworkPolicyManagerServiceTest { assertEquals("Unexpected template match rule in network policies", NetworkTemplate.MATCH_CARRIER, actualPolicy.template.getMatchRule()); assertEquals("Unexpected subscriberId match rule in network policies", NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT, actualPolicy.template.getSubscriberIdMatchRule()); assertTrue("Unexpected subscriberIds size in network policies", actualPolicy.template.getSubscriberIds().size() > 0); assertEquals("Unexpected template meteredness in network policies", METERED_YES, actualPolicy.template.getMeteredness()); } Loading @@ -2003,9 +2002,8 @@ public class NetworkPolicyManagerServiceTest { assertEquals("Unexpected template match rule in network policies", NetworkTemplate.MATCH_WIFI, actualPolicy.template.getMatchRule()); assertEquals("Unexpected subscriberId match rule in network policies", NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_ALL, actualPolicy.template.getSubscriberIdMatchRule()); assertEquals("Unexpected subscriberIds size in network policies", actualPolicy.template.getSubscriberIds().size(), 0); assertEquals("Unexpected template meteredness in network policies", METERED_NO, actualPolicy.template.getMeteredness()); } Loading