Loading common/networkstackclient/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ aidl_interface { "src/android/net/IIpMemoryStore.aidl", "src/android/net/IIpMemoryStoreCallbacks.aidl", "src/android/net/ipmemorystore/**/*.aidl", "src/android/net/quirks/IPv6ProvisioningLossQuirkParcelable.aidl", ], backend: { java: { Loading Loading @@ -132,6 +133,7 @@ java_library { "src/android/net/IpMemoryStoreClient.java", "src/android/net/ipmemorystore/**/*.java", "src/android/net/networkstack/**/*.java", "src/android/net/quirks/**/*.java", "src/android/net/shared/**/*.java", ], static_libs: [ Loading common/networkstackclient/aidl_api/ipmemorystore-aidl-interfaces/current/android/net/ipmemorystore/NetworkAttributesParcelable.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -23,4 +23,5 @@ parcelable NetworkAttributesParcelable { String cluster; android.net.ipmemorystore.Blob[] dnsAddresses; int mtu; @nullable android.net.quirks.IPv6ProvisioningLossQuirkParcelable ipv6ProvLossQuirk; } common/networkstackclient/aidl_api/ipmemorystore-aidl-interfaces/current/android/net/quirks/IPv6ProvisioningLossQuirkParcelable.aidl 0 → 100644 +22 −0 Original line number Diff line number Diff line /////////////////////////////////////////////////////////////////////////////// // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // /////////////////////////////////////////////////////////////////////////////// // This file is a snapshot of an AIDL interface (or parcelable). Do not try to // edit this file. It looks like you are doing that because you have modified // an AIDL interface in a backward-incompatible way, e.g., deleting a function // from an interface or a field from a parcelable and it broke the build. That // breakage is intended. // // You must not make a backward incompatible changes to the AIDL files built // with the aidl_interface module type with versions property set. The module // type is used to build AIDL files in a way that they can be used across // independently updatable components of the system. If a device is shipped // with such a backward incompatible change, it has a high risk of breaking // later when a module using the interface is updated, e.g., Mainline modules. package android.net.quirks; parcelable IPv6ProvisioningLossQuirkParcelable { int detectionCount; long quirkExpiry; } common/networkstackclient/src/android/net/ipmemorystore/NetworkAttributes.java +48 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.net.ipmemorystore; import android.annotation.NonNull; import android.annotation.Nullable; import android.net.quirks.IPv6ProvisioningLossQuirk; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -83,6 +84,13 @@ public class NetworkAttributes { public final Integer mtu; private static final float WEIGHT_MTU = 50.0f; // IPv6 provisioning quirk info about this network, if applicable. @Nullable public final IPv6ProvisioningLossQuirk ipv6ProvLossQuirk; // quirk information doesn't imply any correlation between "the same quirk detection count and // expiry" and "the same L3 network". private static final float WEIGHT_V6PROVLOSSQUIRK = 0.0f; // The sum of all weights in this class. Tests ensure that this stays equal to the total of // all weights. /** @hide */ Loading @@ -91,7 +99,8 @@ public class NetworkAttributes { + WEIGHT_ASSIGNEDV4ADDREXPIRY + WEIGHT_CLUSTER + WEIGHT_DNSADDRESSES + WEIGHT_MTU; + WEIGHT_MTU + WEIGHT_V6PROVLOSSQUIRK; /** @hide */ @VisibleForTesting Loading @@ -100,7 +109,8 @@ public class NetworkAttributes { @Nullable final Long assignedV4AddressExpiry, @Nullable final String cluster, @Nullable final List<InetAddress> dnsAddresses, @Nullable final Integer mtu) { @Nullable final Integer mtu, @Nullable final IPv6ProvisioningLossQuirk ipv6ProvLossQuirk) { if (mtu != null && mtu < 0) throw new IllegalArgumentException("MTU can't be negative"); if (assignedV4AddressExpiry != null && assignedV4AddressExpiry <= 0) { throw new IllegalArgumentException("lease expiry can't be negative or zero"); Loading @@ -111,6 +121,7 @@ public class NetworkAttributes { this.dnsAddresses = null == dnsAddresses ? null : Collections.unmodifiableList(new ArrayList<>(dnsAddresses)); this.mtu = mtu; this.ipv6ProvLossQuirk = ipv6ProvLossQuirk; } @VisibleForTesting Loading @@ -122,7 +133,8 @@ public class NetworkAttributes { ? parcelable.assignedV4AddressExpiry : null, parcelable.cluster, blobArrayToInetAddressList(parcelable.dnsAddresses), parcelable.mtu >= 0 ? parcelable.mtu : null); parcelable.mtu >= 0 ? parcelable.mtu : null, IPv6ProvisioningLossQuirk.fromStableParcelable(parcelable.ipv6ProvLossQuirk)); } @Nullable Loading Loading @@ -171,6 +183,8 @@ public class NetworkAttributes { parcelable.cluster = cluster; parcelable.dnsAddresses = inetAddressListToBlobArray(dnsAddresses); parcelable.mtu = (null == mtu) ? -1 : mtu; parcelable.ipv6ProvLossQuirk = (null == ipv6ProvLossQuirk) ? null : ipv6ProvLossQuirk.toStableParcelable(); return parcelable; } Loading @@ -184,13 +198,16 @@ public class NetworkAttributes { /** @hide */ public float getNetworkGroupSamenessConfidence(@NonNull final NetworkAttributes o) { // TODO: Remove the useless comparison for members which are associated with 0 weight. final float samenessScore = samenessContribution(WEIGHT_ASSIGNEDV4ADDR, assignedV4Address, o.assignedV4Address) + samenessContribution(WEIGHT_ASSIGNEDV4ADDREXPIRY, assignedV4AddressExpiry, o.assignedV4AddressExpiry) + samenessContribution(WEIGHT_CLUSTER, cluster, o.cluster) + samenessContribution(WEIGHT_DNSADDRESSES, dnsAddresses, o.dnsAddresses) + samenessContribution(WEIGHT_MTU, mtu, o.mtu); + samenessContribution(WEIGHT_MTU, mtu, o.mtu) + samenessContribution(WEIGHT_V6PROVLOSSQUIRK, ipv6ProvLossQuirk, o.ipv6ProvLossQuirk); // The minimum is 0, the max is TOTAL_WEIGHT and should be represented by 1.0, and // TOTAL_WEIGHT_CUTOFF should represent 0.5, but there is no requirement that // TOTAL_WEIGHT_CUTOFF would be half of TOTAL_WEIGHT (indeed, it should not be). Loading @@ -216,6 +233,8 @@ public class NetworkAttributes { private List<InetAddress> mDnsAddresses; @Nullable private Integer mMtu; @Nullable private IPv6ProvisioningLossQuirk mIpv6ProvLossQuirk; /** * Constructs a new Builder. Loading @@ -231,6 +250,7 @@ public class NetworkAttributes { mCluster = attributes.cluster; mDnsAddresses = new ArrayList<>(attributes.dnsAddresses); mMtu = attributes.mtu; mIpv6ProvLossQuirk = attributes.ipv6ProvLossQuirk; } /** Loading Loading @@ -297,20 +317,31 @@ public class NetworkAttributes { return this; } /** * Set the IPv6 Provisioning Loss Quirk information. * @param quirk The IPv6 Provisioning Loss Quirk. * @return This builder. */ public Builder setIpv6ProvLossQuirk(@Nullable final IPv6ProvisioningLossQuirk quirk) { mIpv6ProvLossQuirk = quirk; return this; } /** * Return the built NetworkAttributes object. * @return The built NetworkAttributes object. */ public NetworkAttributes build() { return new NetworkAttributes(mAssignedAddress, mAssignedAddressExpiry, mCluster, mDnsAddresses, mMtu); mCluster, mDnsAddresses, mMtu, mIpv6ProvLossQuirk); } } /** @hide */ public boolean isEmpty() { return (null == assignedV4Address) && (null == assignedV4AddressExpiry) && (null == cluster) && (null == dnsAddresses) && (null == mtu); && (null == cluster) && (null == dnsAddresses) && (null == mtu) && (null == ipv6ProvLossQuirk); } @Override Loading @@ -321,13 +352,14 @@ public class NetworkAttributes { && Objects.equals(assignedV4AddressExpiry, other.assignedV4AddressExpiry) && Objects.equals(cluster, other.cluster) && Objects.equals(dnsAddresses, other.dnsAddresses) && Objects.equals(mtu, other.mtu); && Objects.equals(mtu, other.mtu) && Objects.equals(ipv6ProvLossQuirk, other.ipv6ProvLossQuirk); } @Override public int hashCode() { return Objects.hash(assignedV4Address, assignedV4AddressExpiry, cluster, dnsAddresses, mtu); cluster, dnsAddresses, mtu, ipv6ProvLossQuirk); } /** Pretty print */ Loading Loading @@ -374,6 +406,14 @@ public class NetworkAttributes { nullFields.add("mtu"); } if (null != ipv6ProvLossQuirk) { resultJoiner.add("ipv6ProvLossQuirk : ["); resultJoiner.add(ipv6ProvLossQuirk.toString()); resultJoiner.add("]"); } else { nullFields.add("ipv6ProvLossQuirk"); } if (!nullFields.isEmpty()) { resultJoiner.add("; Null fields : ["); for (final String field : nullFields) { Loading common/networkstackclient/src/android/net/ipmemorystore/NetworkAttributesParcelable.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.net.ipmemorystore; // Blob[] is used to represent an array of byte[], as structured AIDL does not support arrays // of arrays. import android.net.ipmemorystore.Blob; import android.net.quirks.IPv6ProvisioningLossQuirkParcelable; /** * An object to represent attributes of a single L2 network entry. Loading @@ -34,4 +35,5 @@ parcelable NetworkAttributesParcelable { String cluster; Blob[] dnsAddresses; int mtu; @nullable IPv6ProvisioningLossQuirkParcelable ipv6ProvLossQuirk; } Loading
common/networkstackclient/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ aidl_interface { "src/android/net/IIpMemoryStore.aidl", "src/android/net/IIpMemoryStoreCallbacks.aidl", "src/android/net/ipmemorystore/**/*.aidl", "src/android/net/quirks/IPv6ProvisioningLossQuirkParcelable.aidl", ], backend: { java: { Loading Loading @@ -132,6 +133,7 @@ java_library { "src/android/net/IpMemoryStoreClient.java", "src/android/net/ipmemorystore/**/*.java", "src/android/net/networkstack/**/*.java", "src/android/net/quirks/**/*.java", "src/android/net/shared/**/*.java", ], static_libs: [ Loading
common/networkstackclient/aidl_api/ipmemorystore-aidl-interfaces/current/android/net/ipmemorystore/NetworkAttributesParcelable.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -23,4 +23,5 @@ parcelable NetworkAttributesParcelable { String cluster; android.net.ipmemorystore.Blob[] dnsAddresses; int mtu; @nullable android.net.quirks.IPv6ProvisioningLossQuirkParcelable ipv6ProvLossQuirk; }
common/networkstackclient/aidl_api/ipmemorystore-aidl-interfaces/current/android/net/quirks/IPv6ProvisioningLossQuirkParcelable.aidl 0 → 100644 +22 −0 Original line number Diff line number Diff line /////////////////////////////////////////////////////////////////////////////// // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // /////////////////////////////////////////////////////////////////////////////// // This file is a snapshot of an AIDL interface (or parcelable). Do not try to // edit this file. It looks like you are doing that because you have modified // an AIDL interface in a backward-incompatible way, e.g., deleting a function // from an interface or a field from a parcelable and it broke the build. That // breakage is intended. // // You must not make a backward incompatible changes to the AIDL files built // with the aidl_interface module type with versions property set. The module // type is used to build AIDL files in a way that they can be used across // independently updatable components of the system. If a device is shipped // with such a backward incompatible change, it has a high risk of breaking // later when a module using the interface is updated, e.g., Mainline modules. package android.net.quirks; parcelable IPv6ProvisioningLossQuirkParcelable { int detectionCount; long quirkExpiry; }
common/networkstackclient/src/android/net/ipmemorystore/NetworkAttributes.java +48 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.net.ipmemorystore; import android.annotation.NonNull; import android.annotation.Nullable; import android.net.quirks.IPv6ProvisioningLossQuirk; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -83,6 +84,13 @@ public class NetworkAttributes { public final Integer mtu; private static final float WEIGHT_MTU = 50.0f; // IPv6 provisioning quirk info about this network, if applicable. @Nullable public final IPv6ProvisioningLossQuirk ipv6ProvLossQuirk; // quirk information doesn't imply any correlation between "the same quirk detection count and // expiry" and "the same L3 network". private static final float WEIGHT_V6PROVLOSSQUIRK = 0.0f; // The sum of all weights in this class. Tests ensure that this stays equal to the total of // all weights. /** @hide */ Loading @@ -91,7 +99,8 @@ public class NetworkAttributes { + WEIGHT_ASSIGNEDV4ADDREXPIRY + WEIGHT_CLUSTER + WEIGHT_DNSADDRESSES + WEIGHT_MTU; + WEIGHT_MTU + WEIGHT_V6PROVLOSSQUIRK; /** @hide */ @VisibleForTesting Loading @@ -100,7 +109,8 @@ public class NetworkAttributes { @Nullable final Long assignedV4AddressExpiry, @Nullable final String cluster, @Nullable final List<InetAddress> dnsAddresses, @Nullable final Integer mtu) { @Nullable final Integer mtu, @Nullable final IPv6ProvisioningLossQuirk ipv6ProvLossQuirk) { if (mtu != null && mtu < 0) throw new IllegalArgumentException("MTU can't be negative"); if (assignedV4AddressExpiry != null && assignedV4AddressExpiry <= 0) { throw new IllegalArgumentException("lease expiry can't be negative or zero"); Loading @@ -111,6 +121,7 @@ public class NetworkAttributes { this.dnsAddresses = null == dnsAddresses ? null : Collections.unmodifiableList(new ArrayList<>(dnsAddresses)); this.mtu = mtu; this.ipv6ProvLossQuirk = ipv6ProvLossQuirk; } @VisibleForTesting Loading @@ -122,7 +133,8 @@ public class NetworkAttributes { ? parcelable.assignedV4AddressExpiry : null, parcelable.cluster, blobArrayToInetAddressList(parcelable.dnsAddresses), parcelable.mtu >= 0 ? parcelable.mtu : null); parcelable.mtu >= 0 ? parcelable.mtu : null, IPv6ProvisioningLossQuirk.fromStableParcelable(parcelable.ipv6ProvLossQuirk)); } @Nullable Loading Loading @@ -171,6 +183,8 @@ public class NetworkAttributes { parcelable.cluster = cluster; parcelable.dnsAddresses = inetAddressListToBlobArray(dnsAddresses); parcelable.mtu = (null == mtu) ? -1 : mtu; parcelable.ipv6ProvLossQuirk = (null == ipv6ProvLossQuirk) ? null : ipv6ProvLossQuirk.toStableParcelable(); return parcelable; } Loading @@ -184,13 +198,16 @@ public class NetworkAttributes { /** @hide */ public float getNetworkGroupSamenessConfidence(@NonNull final NetworkAttributes o) { // TODO: Remove the useless comparison for members which are associated with 0 weight. final float samenessScore = samenessContribution(WEIGHT_ASSIGNEDV4ADDR, assignedV4Address, o.assignedV4Address) + samenessContribution(WEIGHT_ASSIGNEDV4ADDREXPIRY, assignedV4AddressExpiry, o.assignedV4AddressExpiry) + samenessContribution(WEIGHT_CLUSTER, cluster, o.cluster) + samenessContribution(WEIGHT_DNSADDRESSES, dnsAddresses, o.dnsAddresses) + samenessContribution(WEIGHT_MTU, mtu, o.mtu); + samenessContribution(WEIGHT_MTU, mtu, o.mtu) + samenessContribution(WEIGHT_V6PROVLOSSQUIRK, ipv6ProvLossQuirk, o.ipv6ProvLossQuirk); // The minimum is 0, the max is TOTAL_WEIGHT and should be represented by 1.0, and // TOTAL_WEIGHT_CUTOFF should represent 0.5, but there is no requirement that // TOTAL_WEIGHT_CUTOFF would be half of TOTAL_WEIGHT (indeed, it should not be). Loading @@ -216,6 +233,8 @@ public class NetworkAttributes { private List<InetAddress> mDnsAddresses; @Nullable private Integer mMtu; @Nullable private IPv6ProvisioningLossQuirk mIpv6ProvLossQuirk; /** * Constructs a new Builder. Loading @@ -231,6 +250,7 @@ public class NetworkAttributes { mCluster = attributes.cluster; mDnsAddresses = new ArrayList<>(attributes.dnsAddresses); mMtu = attributes.mtu; mIpv6ProvLossQuirk = attributes.ipv6ProvLossQuirk; } /** Loading Loading @@ -297,20 +317,31 @@ public class NetworkAttributes { return this; } /** * Set the IPv6 Provisioning Loss Quirk information. * @param quirk The IPv6 Provisioning Loss Quirk. * @return This builder. */ public Builder setIpv6ProvLossQuirk(@Nullable final IPv6ProvisioningLossQuirk quirk) { mIpv6ProvLossQuirk = quirk; return this; } /** * Return the built NetworkAttributes object. * @return The built NetworkAttributes object. */ public NetworkAttributes build() { return new NetworkAttributes(mAssignedAddress, mAssignedAddressExpiry, mCluster, mDnsAddresses, mMtu); mCluster, mDnsAddresses, mMtu, mIpv6ProvLossQuirk); } } /** @hide */ public boolean isEmpty() { return (null == assignedV4Address) && (null == assignedV4AddressExpiry) && (null == cluster) && (null == dnsAddresses) && (null == mtu); && (null == cluster) && (null == dnsAddresses) && (null == mtu) && (null == ipv6ProvLossQuirk); } @Override Loading @@ -321,13 +352,14 @@ public class NetworkAttributes { && Objects.equals(assignedV4AddressExpiry, other.assignedV4AddressExpiry) && Objects.equals(cluster, other.cluster) && Objects.equals(dnsAddresses, other.dnsAddresses) && Objects.equals(mtu, other.mtu); && Objects.equals(mtu, other.mtu) && Objects.equals(ipv6ProvLossQuirk, other.ipv6ProvLossQuirk); } @Override public int hashCode() { return Objects.hash(assignedV4Address, assignedV4AddressExpiry, cluster, dnsAddresses, mtu); cluster, dnsAddresses, mtu, ipv6ProvLossQuirk); } /** Pretty print */ Loading Loading @@ -374,6 +406,14 @@ public class NetworkAttributes { nullFields.add("mtu"); } if (null != ipv6ProvLossQuirk) { resultJoiner.add("ipv6ProvLossQuirk : ["); resultJoiner.add(ipv6ProvLossQuirk.toString()); resultJoiner.add("]"); } else { nullFields.add("ipv6ProvLossQuirk"); } if (!nullFields.isEmpty()) { resultJoiner.add("; Null fields : ["); for (final String field : nullFields) { Loading
common/networkstackclient/src/android/net/ipmemorystore/NetworkAttributesParcelable.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.net.ipmemorystore; // Blob[] is used to represent an array of byte[], as structured AIDL does not support arrays // of arrays. import android.net.ipmemorystore.Blob; import android.net.quirks.IPv6ProvisioningLossQuirkParcelable; /** * An object to represent attributes of a single L2 network entry. Loading @@ -34,4 +35,5 @@ parcelable NetworkAttributesParcelable { String cluster; Blob[] dnsAddresses; int mtu; @nullable IPv6ProvisioningLossQuirkParcelable ipv6ProvLossQuirk; }