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

Commit 8dcfb4d4 authored by Xiao Ma's avatar Xiao Ma Committed by Automerger Merge Worker
Browse files

Refactor IPv4/v6 provisioning mode with different enums. am: d1b7d714 am:...

Refactor IPv4/v6 provisioning mode with different enums. am: d1b7d714 am: 5919001e am: 0c3f65fe

Original change: https://android-review.googlesource.com/c/platform/packages/modules/NetworkStack/+/1675593

Change-Id: I0bf0d0da003f18cf36e8a2f2af455cc542e21654
parents b8f74dba 0c3f65fe
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -35,7 +35,13 @@
package android.net;
package android.net;
@JavaDerive(toString=true)
@JavaDerive(toString=true)
parcelable ProvisioningConfigurationParcelable {
parcelable ProvisioningConfigurationParcelable {
  /**
   * @deprecated use ipv4ProvisioningMode instead.
   */
  boolean enableIPv4;
  boolean enableIPv4;
  /**
   * @deprecated use ipv6ProvisioningMode instead.
   */
  boolean enableIPv6;
  boolean enableIPv6;
  boolean usingMultinetworkPolicyTracker;
  boolean usingMultinetworkPolicyTracker;
  boolean usingIpReachabilityMonitor;
  boolean usingIpReachabilityMonitor;
@@ -51,4 +57,6 @@ parcelable ProvisioningConfigurationParcelable {
  @nullable android.net.ScanResultInfoParcelable scanResultInfo;
  @nullable android.net.ScanResultInfoParcelable scanResultInfo;
  @nullable android.net.Layer2InformationParcelable layer2Info;
  @nullable android.net.Layer2InformationParcelable layer2Info;
  @nullable List<android.net.networkstack.aidl.dhcp.DhcpOption> options;
  @nullable List<android.net.networkstack.aidl.dhcp.DhcpOption> options;
  int ipv4ProvisioningMode;
  int ipv6ProvisioningMode;
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -49,4 +49,10 @@ interface IIpClient {
  oneway void addNattKeepalivePacketFilter(int slot, in android.net.NattKeepalivePacketDataParcelable pkt);
  oneway void addNattKeepalivePacketFilter(int slot, in android.net.NattKeepalivePacketDataParcelable pkt);
  oneway void notifyPreconnectionComplete(boolean success);
  oneway void notifyPreconnectionComplete(boolean success);
  oneway void updateLayer2Information(in android.net.Layer2InformationParcelable info);
  oneway void updateLayer2Information(in android.net.Layer2InformationParcelable info);
  const int PROV_IPV4_DISABLED = 0;
  const int PROV_IPV4_STATIC = 1;
  const int PROV_IPV4_DHCP = 2;
  const int PROV_IPV6_DISABLED = 0;
  const int PROV_IPV6_SLAAC = 1;
  const int PROV_IPV6_LINKLOCAL = 2;
}
}
+4 −0
Original line number Original line Diff line number Diff line
@@ -29,7 +29,9 @@ import java.util.List;


@JavaDerive(toString=true)
@JavaDerive(toString=true)
parcelable ProvisioningConfigurationParcelable {
parcelable ProvisioningConfigurationParcelable {
    /** @deprecated use ipv4ProvisioningMode instead. */
    boolean enableIPv4;
    boolean enableIPv4;
    /** @deprecated use ipv6ProvisioningMode instead. */
    boolean enableIPv6;
    boolean enableIPv6;
    boolean usingMultinetworkPolicyTracker;
    boolean usingMultinetworkPolicyTracker;
    boolean usingIpReachabilityMonitor;
    boolean usingIpReachabilityMonitor;
@@ -45,4 +47,6 @@ parcelable ProvisioningConfigurationParcelable {
    @nullable ScanResultInfoParcelable scanResultInfo;
    @nullable ScanResultInfoParcelable scanResultInfo;
    @nullable Layer2InformationParcelable layer2Info;
    @nullable Layer2InformationParcelable layer2Info;
    @nullable List<DhcpOption> options;
    @nullable List<DhcpOption> options;
    int ipv4ProvisioningMode;
    int ipv6ProvisioningMode;
}
}
+30 −0
Original line number Original line Diff line number Diff line
@@ -23,6 +23,36 @@ import android.net.TcpKeepalivePacketDataParcelable;


/** @hide */
/** @hide */
oneway interface IIpClient {
oneway interface IIpClient {
    /**
     * Disable IPv4 provisioning.
     */
    const int PROV_IPV4_DISABLED = 0x00;

    /**
     * Enable IPv4 provisioning using static IP addresses.
     */
    const int PROV_IPV4_STATIC = 0x01;

    /**
     * Enable IPv4 provisioning using DHCP.
     */
    const int PROV_IPV4_DHCP = 0x02;

    /**
     * Disable IPv6 provisioning.
     */
    const int PROV_IPV6_DISABLED = 0x00;

    /**
     * Enable IPv6 provisioning via SLAAC.
     */
    const int PROV_IPV6_SLAAC = 0x01;

    /**
     * Enable IPv6 Link-local only.
     */
    const int PROV_IPV6_LINKLOCAL = 0x02;

    void completedPreDhcpAction();
    void completedPreDhcpAction();
    void confirmConfiguration();
    void confirmConfiguration();
    void readPacketFilterComplete(in byte[] data);
    void readPacketFilterComplete(in byte[] data);
+72 −17
Original line number Original line Diff line number Diff line
@@ -16,6 +16,12 @@


package android.net.shared;
package android.net.shared;


import static android.net.ip.IIpClient.PROV_IPV4_DHCP;
import static android.net.ip.IIpClient.PROV_IPV4_DISABLED;
import static android.net.ip.IIpClient.PROV_IPV4_STATIC;
import static android.net.ip.IIpClient.PROV_IPV6_DISABLED;
import static android.net.ip.IIpClient.PROV_IPV6_LINKLOCAL;
import static android.net.ip.IIpClient.PROV_IPV6_SLAAC;
import static android.net.shared.ParcelableUtil.fromParcelableArray;
import static android.net.shared.ParcelableUtil.fromParcelableArray;
import static android.net.shared.ParcelableUtil.toParcelableArray;
import static android.net.shared.ParcelableUtil.toParcelableArray;


@@ -31,6 +37,8 @@ import android.net.ip.IIpClient;
import android.net.networkstack.aidl.dhcp.DhcpOption;
import android.net.networkstack.aidl.dhcp.DhcpOption;
import android.util.Log;
import android.util.Log;


import com.android.internal.annotations.VisibleForTesting;

import java.nio.BufferUnderflowException;
import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.ArrayList;
@@ -82,6 +90,10 @@ public class ProvisioningConfiguration {
    public static final int IPV6_ADDR_GEN_MODE_EUI64 = 0;
    public static final int IPV6_ADDR_GEN_MODE_EUI64 = 0;
    public static final int IPV6_ADDR_GEN_MODE_STABLE_PRIVACY = 2;
    public static final int IPV6_ADDR_GEN_MODE_STABLE_PRIVACY = 2;


    // ipv4ProvisioningMode and ipv6ProvisioningMode members are introduced since
    // networkstack-aidl-interfaces-v12.
    private static final int VERSION_ADDED_PROVISIONING_ENUM = 12;

    /**
    /**
     * Builder to create a {@link ProvisioningConfiguration}.
     * Builder to create a {@link ProvisioningConfiguration}.
     */
     */
@@ -92,7 +104,7 @@ public class ProvisioningConfiguration {
         * Specify that the configuration should not enable IPv4. It is enabled by default.
         * Specify that the configuration should not enable IPv4. It is enabled by default.
         */
         */
        public Builder withoutIPv4() {
        public Builder withoutIPv4() {
            mConfig.mEnableIPv4 = false;
            mConfig.mIPv4ProvisioningMode = PROV_IPV4_DISABLED;
            return this;
            return this;
        }
        }


@@ -100,7 +112,7 @@ public class ProvisioningConfiguration {
         * Specify that the configuration should not enable IPv6. It is enabled by default.
         * Specify that the configuration should not enable IPv6. It is enabled by default.
         */
         */
        public Builder withoutIPv6() {
        public Builder withoutIPv6() {
            mConfig.mEnableIPv6 = false;
            mConfig.mIPv6ProvisioningMode = PROV_IPV6_DISABLED;
            return this;
            return this;
        }
        }


@@ -162,6 +174,7 @@ public class ProvisioningConfiguration {
         * Specify a static configuration for provisioning.
         * Specify a static configuration for provisioning.
         */
         */
        public Builder withStaticConfiguration(StaticIpConfiguration staticConfig) {
        public Builder withStaticConfiguration(StaticIpConfiguration staticConfig) {
            mConfig.mIPv4ProvisioningMode = PROV_IPV4_STATIC;
            mConfig.mStaticIpConfig = staticConfig;
            mConfig.mStaticIpConfig = staticConfig;
            return this;
            return this;
        }
        }
@@ -433,8 +446,6 @@ public class ProvisioningConfiguration {
        }
        }
    }
    }


    public boolean mEnableIPv4 = true;
    public boolean mEnableIPv6 = true;
    public boolean mEnablePreconnection = false;
    public boolean mEnablePreconnection = false;
    public boolean mUsingMultinetworkPolicyTracker = true;
    public boolean mUsingMultinetworkPolicyTracker = true;
    public boolean mUsingIpReachabilityMonitor = true;
    public boolean mUsingIpReachabilityMonitor = true;
@@ -449,12 +460,12 @@ public class ProvisioningConfiguration {
    public ScanResultInfo mScanResultInfo;
    public ScanResultInfo mScanResultInfo;
    public Layer2Information mLayer2Info;
    public Layer2Information mLayer2Info;
    public List<DhcpOption> mDhcpOptions;
    public List<DhcpOption> mDhcpOptions;
    public int mIPv4ProvisioningMode = PROV_IPV4_DHCP;
    public int mIPv6ProvisioningMode = PROV_IPV6_SLAAC;


    public ProvisioningConfiguration() {} // used by Builder
    public ProvisioningConfiguration() {} // used by Builder


    public ProvisioningConfiguration(ProvisioningConfiguration other) {
    public ProvisioningConfiguration(ProvisioningConfiguration other) {
        mEnableIPv4 = other.mEnableIPv4;
        mEnableIPv6 = other.mEnableIPv6;
        mEnablePreconnection = other.mEnablePreconnection;
        mEnablePreconnection = other.mEnablePreconnection;
        mUsingMultinetworkPolicyTracker = other.mUsingMultinetworkPolicyTracker;
        mUsingMultinetworkPolicyTracker = other.mUsingMultinetworkPolicyTracker;
        mUsingIpReachabilityMonitor = other.mUsingIpReachabilityMonitor;
        mUsingIpReachabilityMonitor = other.mUsingIpReachabilityMonitor;
@@ -471,6 +482,8 @@ public class ProvisioningConfiguration {
        mScanResultInfo = other.mScanResultInfo;
        mScanResultInfo = other.mScanResultInfo;
        mLayer2Info = other.mLayer2Info;
        mLayer2Info = other.mLayer2Info;
        mDhcpOptions = other.mDhcpOptions;
        mDhcpOptions = other.mDhcpOptions;
        mIPv4ProvisioningMode = other.mIPv4ProvisioningMode;
        mIPv6ProvisioningMode = other.mIPv6ProvisioningMode;
    }
    }


    /**
    /**
@@ -478,8 +491,10 @@ public class ProvisioningConfiguration {
     */
     */
    public ProvisioningConfigurationParcelable toStableParcelable() {
    public ProvisioningConfigurationParcelable toStableParcelable() {
        final ProvisioningConfigurationParcelable p = new ProvisioningConfigurationParcelable();
        final ProvisioningConfigurationParcelable p = new ProvisioningConfigurationParcelable();
        p.enableIPv4 = mEnableIPv4;
        p.enableIPv4 = (mIPv4ProvisioningMode != PROV_IPV4_DISABLED);
        p.enableIPv6 = mEnableIPv6;
        p.ipv4ProvisioningMode = mIPv4ProvisioningMode;
        p.enableIPv6 = (mIPv6ProvisioningMode != PROV_IPV6_DISABLED);
        p.ipv6ProvisioningMode = mIPv6ProvisioningMode;
        p.enablePreconnection = mEnablePreconnection;
        p.enablePreconnection = mEnablePreconnection;
        p.usingMultinetworkPolicyTracker = mUsingMultinetworkPolicyTracker;
        p.usingMultinetworkPolicyTracker = mUsingMultinetworkPolicyTracker;
        p.usingIpReachabilityMonitor = mUsingIpReachabilityMonitor;
        p.usingIpReachabilityMonitor = mUsingIpReachabilityMonitor;
@@ -501,13 +516,16 @@ public class ProvisioningConfiguration {


    /**
    /**
     * Create a ProvisioningConfiguration from a ProvisioningConfigurationParcelable.
     * Create a ProvisioningConfiguration from a ProvisioningConfigurationParcelable.
     *
     * @param p stable parcelable instance to be converted to a {@link ProvisioningConfiguration}.
     * @param interfaceVersion IIpClientCallbacks interface version called by the remote peer,
     *                         which is used to determine the appropriate parcelable members for
     *                         backwards compatibility.
     */
     */
    public static ProvisioningConfiguration fromStableParcelable(
    public static ProvisioningConfiguration fromStableParcelable(
            @Nullable ProvisioningConfigurationParcelable p) {
            @Nullable ProvisioningConfigurationParcelable p, int interfaceVersion) {
        if (p == null) return null;
        if (p == null) return null;
        final ProvisioningConfiguration config = new ProvisioningConfiguration();
        final ProvisioningConfiguration config = new ProvisioningConfiguration();
        config.mEnableIPv4 = p.enableIPv4;
        config.mEnableIPv6 = p.enableIPv6;
        config.mEnablePreconnection = p.enablePreconnection;
        config.mEnablePreconnection = p.enablePreconnection;
        config.mUsingMultinetworkPolicyTracker = p.usingMultinetworkPolicyTracker;
        config.mUsingMultinetworkPolicyTracker = p.usingMultinetworkPolicyTracker;
        config.mUsingIpReachabilityMonitor = p.usingIpReachabilityMonitor;
        config.mUsingIpReachabilityMonitor = p.usingIpReachabilityMonitor;
@@ -524,14 +542,49 @@ public class ProvisioningConfiguration {
        config.mScanResultInfo = ScanResultInfo.fromStableParcelable(p.scanResultInfo);
        config.mScanResultInfo = ScanResultInfo.fromStableParcelable(p.scanResultInfo);
        config.mLayer2Info = Layer2Information.fromStableParcelable(p.layer2Info);
        config.mLayer2Info = Layer2Information.fromStableParcelable(p.layer2Info);
        config.mDhcpOptions = (p.options == null) ? null : new ArrayList<>(p.options);
        config.mDhcpOptions = (p.options == null) ? null : new ArrayList<>(p.options);
        if (interfaceVersion < VERSION_ADDED_PROVISIONING_ENUM) {
            config.mIPv4ProvisioningMode = p.enableIPv4 ? PROV_IPV4_DHCP : PROV_IPV4_DISABLED;
            config.mIPv6ProvisioningMode = p.enableIPv6 ? PROV_IPV6_SLAAC : PROV_IPV6_DISABLED;
        } else {
            config.mIPv4ProvisioningMode = p.ipv4ProvisioningMode;
            config.mIPv6ProvisioningMode = p.ipv6ProvisioningMode;
        }
        return config;
        return config;
    }
    }


    @VisibleForTesting
    static String ipv4ProvisioningModeToString(int mode) {
        switch (mode) {
            case PROV_IPV4_DISABLED:
                return "disabled";
            case PROV_IPV4_STATIC:
                return "static";
            case PROV_IPV4_DHCP:
                return "dhcp";
            default:
                return "unknown";
        }
    }

    @VisibleForTesting
    static String ipv6ProvisioningModeToString(int mode) {
        switch (mode) {
            case PROV_IPV6_DISABLED:
                return "disabled";
            case PROV_IPV6_SLAAC:
                return "slaac";
            case PROV_IPV6_LINKLOCAL:
                return "link-local";
            default:
                return "unknown";
        }
    }

    @Override
    @Override
    public String toString() {
    public String toString() {
        final String ipv4ProvisioningMode = ipv4ProvisioningModeToString(mIPv4ProvisioningMode);
        final String ipv6ProvisioningMode = ipv6ProvisioningModeToString(mIPv6ProvisioningMode);
        return new StringJoiner(", ", getClass().getSimpleName() + "{", "}")
        return new StringJoiner(", ", getClass().getSimpleName() + "{", "}")
                .add("mEnableIPv4: " + mEnableIPv4)
                .add("mEnableIPv6: " + mEnableIPv6)
                .add("mEnablePreconnection: " + mEnablePreconnection)
                .add("mEnablePreconnection: " + mEnablePreconnection)
                .add("mUsingMultinetworkPolicyTracker: " + mUsingMultinetworkPolicyTracker)
                .add("mUsingMultinetworkPolicyTracker: " + mUsingMultinetworkPolicyTracker)
                .add("mUsingIpReachabilityMonitor: " + mUsingIpReachabilityMonitor)
                .add("mUsingIpReachabilityMonitor: " + mUsingIpReachabilityMonitor)
@@ -546,6 +599,8 @@ public class ProvisioningConfiguration {
                .add("mScanResultInfo: " + mScanResultInfo)
                .add("mScanResultInfo: " + mScanResultInfo)
                .add("mLayer2Info: " + mLayer2Info)
                .add("mLayer2Info: " + mLayer2Info)
                .add("mDhcpOptions: " + mDhcpOptions)
                .add("mDhcpOptions: " + mDhcpOptions)
                .add("mIPv4ProvisioningMode: " + ipv4ProvisioningMode)
                .add("mIPv6ProvisioningMode: " + ipv6ProvisioningMode)
                .toString();
                .toString();
    }
    }


@@ -575,9 +630,7 @@ public class ProvisioningConfiguration {
    public boolean equals(Object obj) {
    public boolean equals(Object obj) {
        if (!(obj instanceof ProvisioningConfiguration)) return false;
        if (!(obj instanceof ProvisioningConfiguration)) return false;
        final ProvisioningConfiguration other = (ProvisioningConfiguration) obj;
        final ProvisioningConfiguration other = (ProvisioningConfiguration) obj;
        return mEnableIPv4 == other.mEnableIPv4
        return mEnablePreconnection == other.mEnablePreconnection
                && mEnableIPv6 == other.mEnableIPv6
                && mEnablePreconnection == other.mEnablePreconnection
                && mUsingMultinetworkPolicyTracker == other.mUsingMultinetworkPolicyTracker
                && mUsingMultinetworkPolicyTracker == other.mUsingMultinetworkPolicyTracker
                && mUsingIpReachabilityMonitor == other.mUsingIpReachabilityMonitor
                && mUsingIpReachabilityMonitor == other.mUsingIpReachabilityMonitor
                && mRequestedPreDhcpActionMs == other.mRequestedPreDhcpActionMs
                && mRequestedPreDhcpActionMs == other.mRequestedPreDhcpActionMs
@@ -590,7 +643,9 @@ public class ProvisioningConfiguration {
                && Objects.equals(mDisplayName, other.mDisplayName)
                && Objects.equals(mDisplayName, other.mDisplayName)
                && Objects.equals(mScanResultInfo, other.mScanResultInfo)
                && Objects.equals(mScanResultInfo, other.mScanResultInfo)
                && Objects.equals(mLayer2Info, other.mLayer2Info)
                && Objects.equals(mLayer2Info, other.mLayer2Info)
                && dhcpOptionListEquals(mDhcpOptions, other.mDhcpOptions);
                && dhcpOptionListEquals(mDhcpOptions, other.mDhcpOptions)
                && mIPv4ProvisioningMode == other.mIPv4ProvisioningMode
                && mIPv6ProvisioningMode == other.mIPv6ProvisioningMode;
    }
    }


    public boolean isValid() {
    public boolean isValid() {
Loading