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

Commit 2dfee023 authored by markchien's avatar markchien Committed by Mark Chien
Browse files

Migrate legacy dhcp server config to DeviceConfig

Legacy dhcp server can also be enabled by resource config.

Bug: 144814607
Test: -build, flash, boot
      -atest TetheringTests

Change-Id: I8ae5fa3d5bbd88129bd0890f71be6f8a1bfec0eb
parent dcc69629
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MANAGE_USB" />
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
    <uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY" />
    <uses-permission android:name="android.permission.TETHER_PRIVILEGED" />
    <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
+3 −0
Original line number Diff line number Diff line
@@ -49,6 +49,9 @@
        <item>"bt-pan"</item>
    </string-array>

    <!-- Use the old dnsmasq DHCP server for tethering instead of the framework implementation. -->
    <bool translatable="false" name="config_tether_enable_legacy_dhcp_server">false</bool>

    <!-- Dhcp range (min, max) to use for tethering purposes -->
    <string-array translatable="false" name="config_tether_dhcp_range">
    </string-array>
+1 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
            <item type="array" name="config_tether_wifi_p2p_regexs"/>
            <item type="array" name="config_tether_bluetooth_regexs"/>
            <item type="array" name="config_tether_dhcp_range"/>
            <item type="bool" name="config_tether_enable_legacy_dhcp_server"/>
            <item type="array" name="config_tether_upstream_types"/>
            <item type="bool" name="config_tether_upstream_automatic"/>
            <!-- Configuration values for tethering entitlement check -->
+18 −8
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_MOBILE_DUN;
import static android.net.ConnectivityManager.TYPE_MOBILE_HIPRI;
import static android.provider.Settings.Global.TETHER_ENABLE_LEGACY_DHCP_SERVER;
import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;

import static com.android.internal.R.array.config_mobile_hotspot_provision_app;
import static com.android.internal.R.array.config_tether_bluetooth_regexs;
@@ -33,13 +33,13 @@ import static com.android.internal.R.array.config_tether_wifi_regexs;
import static com.android.internal.R.bool.config_tether_upstream_automatic;
import static com.android.internal.R.integer.config_mobile_hotspot_provision_check_period;
import static com.android.internal.R.string.config_mobile_hotspot_provision_app_no_ui;
import static com.android.networkstack.tethering.R.bool.config_tether_enable_legacy_dhcp_server;

import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
import android.net.TetheringConfigurationParcel;
import android.net.util.SharedLog;
import android.provider.Settings;
import android.provider.DeviceConfig;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -84,6 +84,12 @@ public class TetheringConfiguration {

    private static final String[] DEFAULT_IPV4_DNS = {"8.8.4.4", "8.8.8.8"};

    /**
     * Use the old dnsmasq DHCP server for tethering instead of the framework implementation.
     */
    public static final String TETHER_ENABLE_LEGACY_DHCP_SERVER =
            "tether_enable_legacy_dhcp_server";

    public final String[] tetherableUsbRegexs;
    public final String[] tetherableWifiRegexs;
    public final String[] tetherableWifiP2pRegexs;
@@ -122,7 +128,7 @@ public class TetheringConfiguration {

        legacyDhcpRanges = getLegacyDhcpRanges(res);
        defaultIPv4DNS = copy(DEFAULT_IPV4_DNS);
        enableLegacyDhcpServer = getEnableLegacyDhcpServer(ctx);
        enableLegacyDhcpServer = getEnableLegacyDhcpServer(res);

        provisioningApp = getResourceStringArray(res, config_mobile_hotspot_provision_app);
        provisioningAppNoUi = getProvisioningAppNoUi(res);
@@ -332,10 +338,14 @@ public class TetheringConfiguration {
        }
    }

    private static boolean getEnableLegacyDhcpServer(Context ctx) {
        final ContentResolver cr = ctx.getContentResolver();
        final int intVal = Settings.Global.getInt(cr, TETHER_ENABLE_LEGACY_DHCP_SERVER, 0);
        return intVal != 0;
    private boolean getEnableLegacyDhcpServer(final Resources res) {
        return getResourceBoolean(res, config_tether_enable_legacy_dhcp_server)
                || getDeviceConfigBoolean(TETHER_ENABLE_LEGACY_DHCP_SERVER);
    }

    @VisibleForTesting
    protected boolean getDeviceConfigBoolean(final String name) {
        return DeviceConfig.getBoolean(NAMESPACE_CONNECTIVITY, name, false /** defaultValue */);
    }

    private Resources getResources(Context ctx, int subId) {
+9 −13
Original line number Diff line number Diff line
@@ -22,10 +22,12 @@ import static android.net.TetheringManager.TETHERING_WIFI;
import static android.net.TetheringManager.TETHER_ERROR_ENTITLEMENT_UNKONWN;
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
import static android.net.TetheringManager.TETHER_ERROR_PROVISION_FAILED;
import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.networkstack.tethering.R.bool.config_tether_enable_legacy_dhcp_server;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -39,7 +41,6 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
import android.net.util.SharedLog;
@@ -49,9 +50,8 @@ import android.os.PersistableBundle;
import android.os.ResultReceiver;
import android.os.SystemProperties;
import android.os.test.TestLooper;
import android.provider.Settings;
import android.provider.DeviceConfig;
import android.telephony.CarrierConfigManager;
import android.test.mock.MockContentResolver;

import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -60,7 +60,6 @@ import com.android.internal.R;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
import com.android.internal.util.test.BroadcastInterceptingContext;
import com.android.internal.util.test.FakeSettingsProvider;

import org.junit.After;
import org.junit.Before;
@@ -94,7 +93,6 @@ public final class EntitlementManagerTest {
    private final PersistableBundle mCarrierConfig = new PersistableBundle();
    private final TestLooper mLooper = new TestLooper();
    private Context mMockContext;
    private MockContentResolver mContentResolver;

    private TestStateMachine mSM;
    private WrappedEntitlementManager mEnMgr;
@@ -110,11 +108,6 @@ public final class EntitlementManagerTest {
        public Resources getResources() {
            return mResources;
        }

        @Override
        public ContentResolver getContentResolver() {
            return mContentResolver;
        }
    }

    public class WrappedEntitlementManager extends EntitlementManager {
@@ -151,13 +144,17 @@ public final class EntitlementManagerTest {
        MockitoAnnotations.initMocks(this);
        mMockingSession = mockitoSession()
                .initMocks(this)
                .spyStatic(SystemProperties.class)
                .mockStatic(SystemProperties.class)
                .mockStatic(DeviceConfig.class)
                .strictness(Strictness.WARN)
                .startMocking();
        // Don't disable tethering provisioning unless requested.
        doReturn(false).when(
                () -> SystemProperties.getBoolean(
                eq(EntitlementManager.DISABLE_PROVISIONING_SYSPROP_KEY), anyBoolean()));
        doReturn(false).when(
                () -> DeviceConfig.getBoolean(eq(NAMESPACE_CONNECTIVITY),
                eq(TetheringConfiguration.TETHER_ENABLE_LEGACY_DHCP_SERVER), anyBoolean()));

        when(mResources.getStringArray(R.array.config_tether_dhcp_range))
            .thenReturn(new String[0]);
@@ -169,10 +166,9 @@ public final class EntitlementManagerTest {
            .thenReturn(new String[0]);
        when(mResources.getIntArray(R.array.config_tether_upstream_types))
            .thenReturn(new int[0]);
        when(mResources.getBoolean(config_tether_enable_legacy_dhcp_server)).thenReturn(false);
        when(mLog.forSubComponent(anyString())).thenReturn(mLog);

        mContentResolver = new MockContentResolver();
        mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider());
        mMockContext = new MockContext(mContext);
        mSM = new TestStateMachine();
        mEnMgr = new WrappedEntitlementManager(mMockContext, mSM, mLog, EVENT_EM_UPDATE);
Loading