Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26a8cbe1 authored by Jack Yu's avatar Jack Yu Committed by Android (Google) Code Review
Browse files

Merge "API changes for IPv6 MTU support"

parents 49161ea0 77a7ea65
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -6253,6 +6253,8 @@ package android.net {
  public final class RouteInfo implements android.os.Parcelable {
    ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int);
    ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int, int);
    method public int getMtu();
    method public int getType();
    field public static final int RTN_THROW = 9; // 0x9
    field public static final int RTN_UNICAST = 1; // 0x1
@@ -12146,7 +12148,9 @@ package android.telephony.data {
    method public int getId();
    method @NonNull public String getInterfaceName();
    method public int getLinkStatus();
    method public int getMtu();
    method @Deprecated public int getMtu();
    method public int getMtuV4();
    method public int getMtuV6();
    method @NonNull public java.util.List<java.net.InetAddress> getPcscfAddresses();
    method public int getProtocolType();
    method public int getSuggestedRetryTime();
@@ -12168,7 +12172,9 @@ package android.telephony.data {
    method @NonNull public android.telephony.data.DataCallResponse.Builder setId(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setInterfaceName(@NonNull String);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setLinkStatus(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtu(int);
    method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setMtu(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV4(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV6(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setPcscfAddresses(@NonNull java.util.List<java.net.InetAddress>);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setProtocolType(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setSuggestedRetryTime(int);
@@ -12179,7 +12185,9 @@ package android.telephony.data {
    method @NonNull public String getApn();
    method public int getAuthType();
    method public int getBearerBitmask();
    method public int getMtu();
    method @Deprecated public int getMtu();
    method public int getMtuV4();
    method public int getMtuV6();
    method @Nullable public String getPassword();
    method public int getProfileId();
    method public int getProtocolType();
@@ -12204,7 +12212,9 @@ package android.telephony.data {
    method @NonNull public android.telephony.data.DataProfile.Builder setApn(@NonNull String);
    method @NonNull public android.telephony.data.DataProfile.Builder setAuthType(int);
    method @NonNull public android.telephony.data.DataProfile.Builder setBearerBitmask(int);
    method @NonNull public android.telephony.data.DataProfile.Builder setMtu(int);
    method @Deprecated @NonNull public android.telephony.data.DataProfile.Builder setMtu(int);
    method @NonNull public android.telephony.data.DataProfile.Builder setMtuV4(int);
    method @NonNull public android.telephony.data.DataProfile.Builder setMtuV6(int);
    method @NonNull public android.telephony.data.DataProfile.Builder setPassword(@NonNull String);
    method @NonNull public android.telephony.data.DataProfile.Builder setPersistent(boolean);
    method @NonNull public android.telephony.data.DataProfile.Builder setPreferred(boolean);
+53 −8
Original line number Diff line number Diff line
@@ -105,6 +105,11 @@ public final class RouteInfo implements Parcelable {
     */
    private final int mType;

    /**
     * The maximum transmission unit size for this route.
     */
    private final int mMtu;

    // Derived data members.
    // TODO: remove these.
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
@@ -133,6 +138,31 @@ public final class RouteInfo implements Parcelable {
    @TestApi
    public RouteInfo(@Nullable IpPrefix destination, @Nullable InetAddress gateway,
            @Nullable String iface, @RouteType int type) {
        this(destination, gateway, iface, type, 0);
    }

    /**
     * Constructs a RouteInfo object.
     *
     * If destination is null, then gateway must be specified and the
     * constructed route is either the IPv4 default route <code>0.0.0.0</code>
     * if the gateway is an instance of {@link Inet4Address}, or the IPv6 default
     * route <code>::/0</code> if gateway is an instance of
     * {@link Inet6Address}.
     * <p>
     * destination and gateway may not both be null.
     *
     * @param destination the destination prefix
     * @param gateway the IP address to route packets through
     * @param iface the interface name to send packets on
     * @param type the type of this route
     * @param mtu the maximum transmission unit size for this route
     *
     * @hide
     */
    @SystemApi
    public RouteInfo(@Nullable IpPrefix destination, @Nullable InetAddress gateway,
            @Nullable String iface, @RouteType int type, int mtu) {
        switch (type) {
            case RTN_UNICAST:
            case RTN_UNREACHABLE:
@@ -177,10 +207,10 @@ public final class RouteInfo implements Parcelable {
        }
        mHasGateway = (!gateway.isAnyLocalAddress());

        if ((destination.getAddress() instanceof Inet4Address &&
                 (gateway instanceof Inet4Address == false)) ||
                (destination.getAddress() instanceof Inet6Address &&
                 (gateway instanceof Inet6Address == false))) {
        if ((destination.getAddress() instanceof Inet4Address
                && !(gateway instanceof Inet4Address))
                || (destination.getAddress() instanceof Inet6Address
                && !(gateway instanceof Inet6Address))) {
            throw new IllegalArgumentException("address family mismatch in RouteInfo constructor");
        }
        mDestination = destination;  // IpPrefix objects are immutable.
@@ -188,6 +218,7 @@ public final class RouteInfo implements Parcelable {
        mInterface = iface;          // Strings are immutable.
        mType = type;
        mIsHost = isHost();
        mMtu = mtu;
    }

    /**
@@ -373,6 +404,17 @@ public final class RouteInfo implements Parcelable {
        return mType;
    }

    /**
     * Retrieves the MTU size for this route.
     *
     * @return The MTU size, or 0 if it has not been set.
     * @hide
     */
    @SystemApi
    public int getMtu() {
        return mMtu;
    }

    /**
     * Indicates if this route is a default route (ie, has no destination specified).
     *
@@ -463,6 +505,7 @@ public final class RouteInfo implements Parcelable {
                val += " unknown type " + mType;
            }
        }
        val += " mtu " + mMtu;
        return val;
    }

@@ -480,7 +523,7 @@ public final class RouteInfo implements Parcelable {
        return Objects.equals(mDestination, target.getDestination()) &&
                Objects.equals(mGateway, target.getGateway()) &&
                Objects.equals(mInterface, target.getInterface()) &&
                mType == target.getType();
                mType == target.getType() && mMtu == target.getMtu();
    }

    /**
@@ -490,7 +533,7 @@ public final class RouteInfo implements Parcelable {
        return (mDestination.hashCode() * 41)
                + (mGateway == null ? 0 :mGateway.hashCode() * 47)
                + (mInterface == null ? 0 :mInterface.hashCode() * 67)
                + (mType * 71);
                + (mType * 71) + (mMtu * 89);
    }

    /**
@@ -509,6 +552,7 @@ public final class RouteInfo implements Parcelable {
        dest.writeByteArray(gatewayBytes);
        dest.writeString(mInterface);
        dest.writeInt(mType);
        dest.writeInt(mMtu);
    }

    /**
@@ -527,8 +571,9 @@ public final class RouteInfo implements Parcelable {

            String iface = in.readString();
            int type = in.readInt();
            int mtu = in.readInt();

            return new RouteInfo(dest, gateway, iface, type);
            return new RouteInfo(dest, gateway, iface, type, mtu);
        }

        public RouteInfo[] newArray(int size) {
+120 −9
Original line number Diff line number Diff line
@@ -78,6 +78,9 @@ public final class DataCallResponse implements Parcelable {
    private final List<InetAddress> mGatewayAddresses;
    private final List<InetAddress> mPcscfAddresses;
    private final int mMtu;
    private final int mMtuV4;
    private final int mMtuV6;
    private final int mVersion;

    /**
     * @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error.
@@ -97,9 +100,8 @@ public final class DataCallResponse implements Parcelable {
     * "192.0.1.11 2001:db8::1". When null, the addresses represent point to point connections.
     * @param pcscfAddresses A list of Proxy Call State Control Function address via PCO (Protocol
     * Configuration Option) for IMS client.
     * @param mtu MTU (maximum transmission unit) in bytes received from network. Zero or negative
     * values means network has either not sent a value or sent an invalid value.
     * either not sent a value or sent an invalid value.
     * @param mtu MTU (maximum transmission unit) in bytes received from network.
     * Zero or negative values means network has either not sent a value or sent an invalid value.
     *
     * @removed Use the {@link Builder()} instead.
     */
@@ -125,6 +127,34 @@ public final class DataCallResponse implements Parcelable {
        mPcscfAddresses = (pcscfAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(pcscfAddresses);
        mMtu = mtu;
        mMtuV4 = mMtuV6 = 0;
        mVersion = 0;
    }

    /** @hide */
    private DataCallResponse(@DataFailureCause int cause, int suggestedRetryTime, int id,
            @LinkStatus int linkStatus, @ProtocolType int protocolType,
            @Nullable String interfaceName, @Nullable List<LinkAddress> addresses,
            @Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
            @Nullable List<InetAddress> pcscfAddresses, int mtuV4, int mtuV6, int version) {
        mCause = cause;
        mSuggestedRetryTime = suggestedRetryTime;
        mId = id;
        mLinkStatus = linkStatus;
        mProtocolType = protocolType;
        mInterfaceName = (interfaceName == null) ? "" : interfaceName;
        mAddresses = (addresses == null)
                ? new ArrayList<>() : new ArrayList<>(addresses);
        mDnsAddresses = (dnsAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(dnsAddresses);
        mGatewayAddresses = (gatewayAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(gatewayAddresses);
        mPcscfAddresses = (pcscfAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(pcscfAddresses);
        mMtu = 0;
        mMtuV4 = mtuV4;
        mMtuV6 = mtuV6;
        mVersion = version;
    }

    /** @hide */
@@ -145,6 +175,9 @@ public final class DataCallResponse implements Parcelable {
        mPcscfAddresses = new ArrayList<>();
        source.readList(mPcscfAddresses, InetAddress.class.getClassLoader());
        mMtu = source.readInt();
        mMtuV4 = source.readInt();
        mMtuV6 = source.readInt();
        mVersion = source.readInt();
    }

    /**
@@ -210,8 +243,29 @@ public final class DataCallResponse implements Parcelable {
    /**
     * @return MTU (maximum transmission unit) in bytes received from network. Zero or negative
     * values means network has either not sent a value or sent an invalid value.
     * @deprecated For IRadio 1.5 and up, use {@link #getMtuV4} or {@link #getMtuV6} instead.
     */
    @Deprecated
    public int getMtu() {
        return mVersion < 5 ? mMtu : 0;
    }

    /**
     * This replaces the deprecated method getMtu.
     * @return MTU (maximum transmission unit) in bytes received from network, for IPv4.
     * Zero or negative values means network has either not sent a value or sent an invalid value.
     */
    public int getMtu() { return mMtu; }
    public int getMtuV4() {
        return mVersion < 5 ? 0 : mMtuV4;
    }

    /**
     * @return MTU (maximum transmission unit) in bytes received from network, for IPv6.
     * Zero or negative values means network has either not sent a value or sent an invalid value.
     */
    public int getMtuV6() {
        return mVersion < 5 ? 0 : mMtuV6;
    }

    @NonNull
    @Override
@@ -229,6 +283,9 @@ public final class DataCallResponse implements Parcelable {
           .append(" gateways=").append(mGatewayAddresses)
           .append(" pcscf=").append(mPcscfAddresses)
           .append(" mtu=").append(mMtu)
           .append(" mtuV4=").append(mMtuV4)
           .append(" mtuV6=").append(mMtuV6)
           .append(" version=").append(mVersion)
           .append("}");
        return sb.toString();
    }
@@ -256,14 +313,17 @@ public final class DataCallResponse implements Parcelable {
                && mGatewayAddresses.containsAll(other.mGatewayAddresses)
                && mPcscfAddresses.size() == other.mPcscfAddresses.size()
                && mPcscfAddresses.containsAll(other.mPcscfAddresses)
                && mMtu == other.mMtu;
                && mMtu == other.mMtu
                && mMtuV4 == other.mMtuV4
                && mMtuV6 == other.mMtuV6
                && mVersion == other.mVersion;
    }

    @Override
    public int hashCode() {
        return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
                mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses, mPcscfAddresses,
                mMtu);
                mMtu, mMtuV4, mMtuV6, mVersion);
    }

    @Override
@@ -284,6 +344,9 @@ public final class DataCallResponse implements Parcelable {
        dest.writeList(mGatewayAddresses);
        dest.writeList(mPcscfAddresses);
        dest.writeInt(mMtu);
        dest.writeInt(mMtuV4);
        dest.writeInt(mMtuV6);
        dest.writeInt(mVersion);
    }

    public static final @android.annotation.NonNull Parcelable.Creator<DataCallResponse> CREATOR =
@@ -336,6 +399,12 @@ public final class DataCallResponse implements Parcelable {

        private int mMtu;

        private int mMtuV4;

        private int mMtuV6;

        private int mVersion;

        /**
         * Default constructor for Builder.
         */
@@ -460,21 +529,63 @@ public final class DataCallResponse implements Parcelable {
         * negative values means network has either not sent a value or sent an invalid value.
         *
         * @return The same instance of the builder.
         * @deprecated For IRadio 1.5 and up, use {@link #setMtuV4} or {@link #setMtuV6} instead.
         */
        public @NonNull Builder setMtu(int mtu) {
            mMtu = mtu;
            return this;
        }

        /**
         * Set maximum transmission unit of the data connection, for IPv4.
         *
         * @param mtu MTU (maximum transmission unit) in bytes received from network. Zero or
         * negative values means network has either not sent a value or sent an invalid value.
         *
         * @return The same instance of the builder.
         */
        public @NonNull Builder setMtuV4(int mtu) {
            mMtuV4 = mtu;
            return this;
        }

        /**
         * Set maximum transmission unit of the data connection, for IPv6.
         *
         * @param mtu MTU (maximum transmission unit) in bytes received from network. Zero or
         * negative values means network has either not sent a value or sent an invalid value.
         *
         * @return The same instance of the builder.
         */
        public @NonNull Builder setMtuV6(int mtu) {
            mMtuV6 = mtu;
            return this;
        }

        /**
         * Set the IRadio version for this DataCallResponse
         * @hide
         */
        public @NonNull Builder setVersion(int version) {
            mVersion = version;
            return this;
        }

        /**
         * Build the DataCallResponse.
         *
         * @return the DataCallResponse object.
         */
        public @NonNull DataCallResponse build() {
            if (mVersion >= 5) {
                return new DataCallResponse(mCause, mSuggestedRetryTime, mId, mLinkStatus,
                        mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses,
                        mPcscfAddresses, mMtuV4, mMtuV6, mVersion);
            } else {
                return new DataCallResponse(mCause, mSuggestedRetryTime, mId, mLinkStatus,
                        mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses,
                        mPcscfAddresses, mMtu);
            }
        }
    }
}
+63 −19
Original line number Diff line number Diff line
@@ -96,7 +96,9 @@ public final class DataProfile implements Parcelable {
    @NetworkTypeBitMask
    private final int mBearerBitmask;

    private final int mMtu;
    private final int mMtuV4;

    private final int mMtuV6;

    private final boolean mPersistent;

@@ -106,9 +108,8 @@ public final class DataProfile implements Parcelable {
    private DataProfile(int profileId, String apn, @ProtocolType int protocolType, int authType,
            String userName, String password, int type, int maxConnectionsTime,
            int maxConnections, int waitTime, boolean enabled,
                        @ApnType int supportedApnTypesBitmask,
                        @ProtocolType int roamingProtocolType,
                        @NetworkTypeBitMask int bearerBitmask, int mtu, boolean persistent,
            @ApnType int supportedApnTypesBitmask, @ProtocolType int roamingProtocolType,
            @NetworkTypeBitMask int bearerBitmask, int mtuV4, int mtuV6, boolean persistent,
            boolean preferred) {
        this.mProfileId = profileId;
        this.mApn = apn;
@@ -128,7 +129,8 @@ public final class DataProfile implements Parcelable {
        this.mSupportedApnTypesBitmask = supportedApnTypesBitmask;
        this.mRoamingProtocolType = roamingProtocolType;
        this.mBearerBitmask = bearerBitmask;
        this.mMtu = mtu;
        this.mMtuV4 = mtuV4;
        this.mMtuV6 = mtuV6;
        this.mPersistent = persistent;
        this.mPreferred = preferred;
    }
@@ -148,7 +150,8 @@ public final class DataProfile implements Parcelable {
        mSupportedApnTypesBitmask = source.readInt();
        mRoamingProtocolType = source.readInt();
        mBearerBitmask = source.readInt();
        mMtu = source.readInt();
        mMtuV4 = source.readInt();
        mMtuV6 = source.readInt();
        mPersistent = source.readBoolean();
        mPreferred = source.readBoolean();
    }
@@ -237,8 +240,21 @@ public final class DataProfile implements Parcelable {

    /**
     * @return The maximum transmission unit (MTU) size in bytes.
     * @deprecated use {@link #getMtuV4} or {@link #getMtuV6} instead.
     */
    @Deprecated
    public int getMtu() { return mMtuV4; }

    /**
     * This replaces the deprecated method getMtu.
     * @return The maximum transmission unit (MTU) size in bytes, for IPv4.
     */
    public int getMtuV4() { return mMtuV4; }

    /**
     * @return The maximum transmission unit (MTU) size in bytes, for IPv6.
     */
    public int getMtu() { return mMtu; }
    public int getMtuV6() { return mMtuV6; }

    /**
     * @return {@code true} if modem must persist this data profile.
@@ -265,8 +281,8 @@ public final class DataProfile implements Parcelable {
                         (mApn + "/" + mUserName + "/" + mPassword)) + "/" + mType + "/"
                + mMaxConnectionsTime + "/" + mMaxConnections + "/"
                + mWaitTime + "/" + mEnabled + "/" + mSupportedApnTypesBitmask + "/"
                + mRoamingProtocolType + "/" + mBearerBitmask + "/" + mMtu + "/" + mPersistent + "/"
                + mPreferred;
                + mRoamingProtocolType + "/" + mBearerBitmask + "/" + mMtuV4 + "/" + mMtuV6 + "/"
                + mPersistent + "/" + mPreferred;
    }

    @Override
@@ -285,7 +301,8 @@ public final class DataProfile implements Parcelable {
        dest.writeInt(mSupportedApnTypesBitmask);
        dest.writeInt(mRoamingProtocolType);
        dest.writeInt(mBearerBitmask);
        dest.writeInt(mMtu);
        dest.writeInt(mMtuV4);
        dest.writeInt(mMtuV6);
        dest.writeBoolean(mPersistent);
        dest.writeBoolean(mPreferred);
    }
@@ -319,7 +336,8 @@ public final class DataProfile implements Parcelable {
                && mSupportedApnTypesBitmask == that.mSupportedApnTypesBitmask
                && mRoamingProtocolType == that.mRoamingProtocolType
                && mBearerBitmask == that.mBearerBitmask
                && mMtu == that.mMtu
                && mMtuV4 == that.mMtuV4
                && mMtuV6 == that.mMtuV6
                && mPersistent == that.mPersistent
                && mPreferred == that.mPreferred
                && Objects.equals(mApn, that.mApn)
@@ -331,8 +349,8 @@ public final class DataProfile implements Parcelable {
    public int hashCode() {
        return Objects.hash(mProfileId, mApn, mProtocolType, mAuthType, mUserName, mPassword, mType,
                mMaxConnectionsTime, mMaxConnections, mWaitTime, mEnabled,
                mSupportedApnTypesBitmask, mRoamingProtocolType, mBearerBitmask, mMtu, mPersistent,
                mPreferred);
                mSupportedApnTypesBitmask, mRoamingProtocolType, mBearerBitmask, mMtuV4, mMtuV6,
                mPersistent, mPreferred);
    }

    /**
@@ -384,7 +402,9 @@ public final class DataProfile implements Parcelable {
        @NetworkTypeBitMask
        private int mBearerBitmask;

        private int mMtu;
        private int mMtuV4;

        private int mMtuV6;

        private boolean mPersistent;

@@ -567,9 +587,33 @@ public final class DataProfile implements Parcelable {
         *
         * @param mtu The maximum transmission unit (MTU) size in bytes.
         * @return The same instance of the builder.
         * @deprecated use {@link #setMtuV4} or {@link #setMtuV6} instead.
         */
        public @NonNull Builder setMtu(int mtu) {
            mMtu = mtu;
            mMtuV4 = mMtuV6 = mtu;
            return this;
        }

        /**
         * Set the maximum transmission unit (MTU) size in bytes, for IPv4.
         * This replaces the deprecated method setMtu.
         *
         * @param mtu The maximum transmission unit (MTU) size in bytes.
         * @return The same instance of the builder.
         */
        public @NonNull Builder setMtuV4(int mtu) {
            mMtuV4 = mtu;
            return this;
        }

        /**
         * Set the maximum transmission unit (MTU) size in bytes, for IPv6.
         *
         * @param mtu The maximum transmission unit (MTU) size in bytes.
         * @return The same instance of the builder.
         */
        public @NonNull Builder setMtuV6(int mtu) {
            mMtuV6 = mtu;
            return this;
        }

@@ -606,7 +650,7 @@ public final class DataProfile implements Parcelable {
        public @NonNull DataProfile build() {
            return new DataProfile(mProfileId, mApn, mProtocolType, mAuthType, mUserName, mPassword,
                    mType, mMaxConnectionsTime, mMaxConnections, mWaitTime, mEnabled,
                    mSupportedApnTypesBitmask, mRoamingProtocolType, mBearerBitmask, mMtu,
                    mSupportedApnTypesBitmask, mRoamingProtocolType, mBearerBitmask, mMtuV4, mMtuV6,
                    mPersistent, mPreferred);
        }
    }
+11 −1
Original line number Diff line number Diff line
@@ -258,6 +258,16 @@ public class RouteInfoTest extends TestCase {
        assertParcelingIsLossless(r);

        r = new RouteInfo(Prefix("192.0.2.0/24"), null, "wlan0");
        assertParcelSane(r, 6);
        assertParcelSane(r, 7);
    }

    public void testMtu() {
        RouteInfo r;
        r = new RouteInfo(Prefix("0.0.0.0/0"), Address("0.0.0.0"), "wlan0",
                RouteInfo.RTN_UNICAST, 1500);
        assertEquals(1500, r.getMtu());

        r = new RouteInfo(Prefix("0.0.0.0/0"), Address("0.0.0.0"), "wlan0");
        assertEquals(0, r.getMtu());
    }
}