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

Commit 5b129a63 authored by Xiao Ma's avatar Xiao Ma
Browse files

Enable DHCP INIT-REBOOT state on R.

Bug: 156575243
Test: atest NetworkStackTests NetworkStackIntegrationTests
Test: atest NetworkStackNextIntegrationTests
Test: manual test:
      1. connect to AP successfully at the first time
      2. disconnect wifi
      3. reconnect to the same AP
      4. checked client broadcasts REQUEST instead of DISCOVER
      5. checked client broadcasts DISCOVER if lease has expired
Merged-In: I62d1ab6b94be1ee95fbaa2ecce62eaba01e7892d
Change-Id: I62d1ab6b94be1ee95fbaa2ecce62eaba01e7892d
parent 7bfc08f9
Loading
Loading
Loading
Loading
+18 −5
Original line number Original line Diff line number Diff line
@@ -74,6 +74,7 @@ import android.net.util.InterfaceParams;
import android.net.util.NetworkStackUtils;
import android.net.util.NetworkStackUtils;
import android.net.util.PacketReader;
import android.net.util.PacketReader;
import android.net.util.SocketUtils;
import android.net.util.SocketUtils;
import android.os.Build;
import android.os.Handler;
import android.os.Handler;
import android.os.Message;
import android.os.Message;
import android.os.PowerManager;
import android.os.PowerManager;
@@ -98,6 +99,7 @@ import com.android.internal.util.WakeupMessage;
import com.android.networkstack.R;
import com.android.networkstack.R;
import com.android.networkstack.apishim.CaptivePortalDataShimImpl;
import com.android.networkstack.apishim.CaptivePortalDataShimImpl;
import com.android.networkstack.apishim.SocketUtilsShimImpl;
import com.android.networkstack.apishim.SocketUtilsShimImpl;
import com.android.networkstack.apishim.common.ShimUtils;
import com.android.networkstack.arp.ArpPacket;
import com.android.networkstack.arp.ArpPacket;


import java.io.FileDescriptor;
import java.io.FileDescriptor;
@@ -407,8 +409,10 @@ public class DhcpClient extends StateMachine {
         * Return whether a feature guarded by a feature flag is enabled.
         * Return whether a feature guarded by a feature flag is enabled.
         * @see NetworkStackUtils#isFeatureEnabled(Context, String, String)
         * @see NetworkStackUtils#isFeatureEnabled(Context, String, String)
         */
         */
        public boolean isFeatureEnabled(final Context context, final String name) {
        public boolean isFeatureEnabled(final Context context, final String name,
            return NetworkStackUtils.isFeatureEnabled(context, NAMESPACE_CONNECTIVITY, name);
                boolean defaultEnabled) {
            return NetworkStackUtils.isFeatureEnabled(context, NAMESPACE_CONNECTIVITY, name,
                    defaultEnabled);
        }
        }


        /**
        /**
@@ -496,23 +500,32 @@ public class DhcpClient extends StateMachine {


    /**
    /**
     * check whether or not to support caching the last lease info and INIT-REBOOT state.
     * check whether or not to support caching the last lease info and INIT-REBOOT state.
     *
     * INIT-REBOOT state is supported on Android R by default if there is no experiment flag set to
     * disable this feature explicitly, meanwhile we still hope to be able to control this feature
     * on/off by pushing experiment flag for A/B testing and metrics collection on both of Android
     * Q and R version, however it's disbled on Android Q by default.
     */
     */
    public boolean isDhcpLeaseCacheEnabled() {
    public boolean isDhcpLeaseCacheEnabled() {
        return mDependencies.isFeatureEnabled(mContext, DHCP_INIT_REBOOT_VERSION);
        final boolean defaultEnabled =
                ShimUtils.isReleaseOrDevelopmentApiAbove(Build.VERSION_CODES.Q);
        return mDependencies.isFeatureEnabled(mContext, DHCP_INIT_REBOOT_VERSION, defaultEnabled);
    }
    }


    /**
    /**
     * check whether or not to support DHCP Rapid Commit option.
     * check whether or not to support DHCP Rapid Commit option.
     */
     */
    public boolean isDhcpRapidCommitEnabled() {
    public boolean isDhcpRapidCommitEnabled() {
        return mDependencies.isFeatureEnabled(mContext, DHCP_RAPID_COMMIT_VERSION);
        return mDependencies.isFeatureEnabled(mContext, DHCP_RAPID_COMMIT_VERSION,
                false /* defaultEnabled */);
    }
    }


    /**
    /**
     * check whether or not to support IP address conflict detection and DHCPDECLINE.
     * check whether or not to support IP address conflict detection and DHCPDECLINE.
     */
     */
    public boolean isDhcpIpConflictDetectEnabled() {
    public boolean isDhcpIpConflictDetectEnabled() {
        return mDependencies.isFeatureEnabled(mContext, DHCP_IP_CONFLICT_DETECT_VERSION);
        return mDependencies.isFeatureEnabled(mContext, DHCP_IP_CONFLICT_DETECT_VERSION,
                false /* defaultEnabled */);
    }
    }


    private void confirmDhcpLease(DhcpPacket packet, DhcpResults results) {
    private void confirmDhcpLease(DhcpPacket packet, DhcpResults results) {
+1 −3
Original line number Original line Diff line number Diff line
@@ -355,9 +355,7 @@ public class NetworkStackUtils {
     */
     */
    public static boolean isFeatureEnabled(@NonNull Context context, @NonNull String namespace,
    public static boolean isFeatureEnabled(@NonNull Context context, @NonNull String namespace,
            @NonNull String name) {
            @NonNull String name) {
        final int propertyVersion = getDeviceConfigPropertyInt(namespace, name,
        return isFeatureEnabled(context, namespace, name, false /* defaultEnabled */);
                0 /* default value */);
        return isFeatureEnabled(context, namespace, name, false);
    }
    }


    /**
    /**
+4 −2
Original line number Original line Diff line number Diff line
@@ -141,6 +141,7 @@ import com.android.server.NetworkObserverRegistry;
import com.android.server.NetworkStackService.NetworkStackServiceManager;
import com.android.server.NetworkStackService.NetworkStackServiceManager;
import com.android.server.connectivity.ipmemorystore.IpMemoryStoreService;
import com.android.server.connectivity.ipmemorystore.IpMemoryStoreService;
import com.android.testutils.DevSdkIgnoreRule;
import com.android.testutils.DevSdkIgnoreRule;
import com.android.testutils.DevSdkIgnoreRule.IgnoreAfter;
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
import com.android.testutils.HandlerUtilsKt;
import com.android.testutils.HandlerUtilsKt;
import com.android.testutils.TapPacketReader;
import com.android.testutils.TapPacketReader;
@@ -319,7 +320,8 @@ public class IpClientIntegrationTest {
                NetworkStackIpMemoryStore ipMemoryStore) {
                NetworkStackIpMemoryStore ipMemoryStore) {
            return new DhcpClient.Dependencies(ipMemoryStore) {
            return new DhcpClient.Dependencies(ipMemoryStore) {
                @Override
                @Override
                public boolean isFeatureEnabled(final Context context, final String name) {
                public boolean isFeatureEnabled(final Context context, final String name,
                        final boolean defaultEnabled) {
                    switch (name) {
                    switch (name) {
                        case NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION:
                        case NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION:
                            return mIsDhcpRapidCommitEnabled;
                            return mIsDhcpRapidCommitEnabled;
@@ -1066,7 +1068,7 @@ public class IpClientIntegrationTest {
        assertIpMemoryStoreNetworkAttributes(null, currentTime, TEST_DEFAULT_MTU);
        assertIpMemoryStoreNetworkAttributes(null, currentTime, TEST_DEFAULT_MTU);
    }
    }


    @Test
    @Test @IgnoreAfter(Build.VERSION_CODES.Q) // INIT-REBOOT is enabled on R.
    public void testHandleDisableInitRebootState() throws Exception {
    public void testHandleDisableInitRebootState() throws Exception {
        performDhcpHandshake(true /* isSuccessLease */, TEST_LEASE_DURATION_S,
        performDhcpHandshake(true /* isSuccessLease */, TEST_LEASE_DURATION_S,
                false /* isDhcpLeaseCacheEnabled */, false /* shouldReplyRapidCommitAck */,
                false /* isDhcpLeaseCacheEnabled */, false /* shouldReplyRapidCommitAck */,