Loading core/java/android/provider/Settings.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -9464,8 +9464,7 @@ public final class Settings { * Use the old dnsmasq DHCP server for tethering instead of the framework implementation. * Use the old dnsmasq DHCP server for tethering instead of the framework implementation. * * * Integer values are interpreted as boolean, and the absence of an explicit setting * Integer values are interpreted as boolean, and the absence of an explicit setting * is interpreted as |true|. * is interpreted as |false|. * TODO: make the default |false| * @hide * @hide */ */ public static final String TETHER_ENABLE_LEGACY_DHCP_SERVER = public static final String TETHER_ENABLE_LEGACY_DHCP_SERVER = Loading services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -320,9 +320,8 @@ public class TetheringConfiguration { } } private static boolean getEnableLegacyDhcpServer(Context ctx) { private static boolean getEnableLegacyDhcpServer(Context ctx) { // TODO: make the default false (0) and update javadoc in Settings.java final ContentResolver cr = ctx.getContentResolver(); final ContentResolver cr = ctx.getContentResolver(); final int intVal = Settings.Global.getInt(cr, TETHER_ENABLE_LEGACY_DHCP_SERVER, 1); final int intVal = Settings.Global.getInt(cr, TETHER_ENABLE_LEGACY_DHCP_SERVER, 0); return intVal != 0; return intVal != 0; } } Loading tests/net/java/com/android/server/connectivity/TetheringTest.java +36 −3 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_INTERFACE_NAME; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_MODE; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_MODE; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE; import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED; import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED; import static android.provider.Settings.Global.TETHER_ENABLE_LEGACY_DHCP_SERVER; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue; Loading Loading @@ -75,6 +76,8 @@ import android.net.NetworkRequest; import android.net.NetworkState; import android.net.NetworkState; import android.net.NetworkUtils; import android.net.NetworkUtils; import android.net.RouteInfo; import android.net.RouteInfo; import android.net.dhcp.DhcpServer; import android.net.dhcp.DhcpServingParams; import android.net.ip.IpServer; import android.net.ip.IpServer; import android.net.ip.RouterAdvertisementDaemon; import android.net.ip.RouterAdvertisementDaemon; import android.net.util.InterfaceParams; import android.net.util.InterfaceParams; Loading @@ -85,6 +88,7 @@ import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Bundle; import android.os.Handler; import android.os.Handler; import android.os.INetworkManagementService; import android.os.INetworkManagementService; import android.os.Looper; import android.os.PersistableBundle; import android.os.PersistableBundle; import android.os.RemoteException; import android.os.RemoteException; import android.os.test.TestLooper; import android.os.test.TestLooper; Loading Loading @@ -146,6 +150,7 @@ public class TetheringTest { @Mock private UpstreamNetworkMonitor mUpstreamNetworkMonitor; @Mock private UpstreamNetworkMonitor mUpstreamNetworkMonitor; @Mock private IPv6TetheringCoordinator mIPv6TetheringCoordinator; @Mock private IPv6TetheringCoordinator mIPv6TetheringCoordinator; @Mock private RouterAdvertisementDaemon mRouterAdvertisementDaemon; @Mock private RouterAdvertisementDaemon mRouterAdvertisementDaemon; @Mock private DhcpServer mDhcpServer; @Mock private INetd mNetd; @Mock private INetd mNetd; private final MockTetheringDependencies mTetheringDependencies = private final MockTetheringDependencies mTetheringDependencies = Loading Loading @@ -240,6 +245,12 @@ public class TetheringTest { public INetd getNetdService() { public INetd getNetdService() { return mNetd; return mNetd; } } @Override public DhcpServer makeDhcpServer(Looper looper, InterfaceParams iface, DhcpServingParams params, SharedLog log) { return mDhcpServer; } }; }; } } Loading Loading @@ -333,6 +344,7 @@ public class TetheringTest { mServiceContext = new MockContext(mContext); mServiceContext = new MockContext(mContext); mContentResolver = new MockContentResolver(mServiceContext); mContentResolver = new MockContentResolver(mServiceContext); mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); Settings.Global.putInt(mContentResolver, TETHER_ENABLE_LEGACY_DHCP_SERVER, 0); mIntents = new Vector<>(); mIntents = new Vector<>(); mBroadcastReceiver = new BroadcastReceiver() { mBroadcastReceiver = new BroadcastReceiver() { @Override @Override Loading @@ -343,10 +355,14 @@ public class TetheringTest { mServiceContext.registerReceiver(mBroadcastReceiver, mServiceContext.registerReceiver(mBroadcastReceiver, new IntentFilter(ACTION_TETHER_STATE_CHANGED)); new IntentFilter(ACTION_TETHER_STATE_CHANGED)); mTetheringDependencies.reset(); mTetheringDependencies.reset(); mTethering = new Tethering(mServiceContext, mNMService, mStatsService, mPolicyManager, mTethering = makeTethering(); verify(mNMService).registerTetheringStatsProvider(any(), anyString()); } private Tethering makeTethering() { return new Tethering(mServiceContext, mNMService, mStatsService, mPolicyManager, mLooper.getLooper(), mSystemProperties, mLooper.getLooper(), mSystemProperties, mTetheringDependencies); mTetheringDependencies); verify(mNMService).registerTetheringStatsProvider(any(), anyString()); } } @After @After Loading Loading @@ -597,6 +613,18 @@ public class TetheringTest { sendIPv6TetherUpdates(upstreamState); sendIPv6TetherUpdates(upstreamState); verify(mRouterAdvertisementDaemon, never()).buildNewRa(any(), notNull()); verify(mRouterAdvertisementDaemon, never()).buildNewRa(any(), notNull()); verify(mDhcpServer, times(1)).start(); } @Test public void workingMobileUsbTethering_IPv4LegacyDhcp() { Settings.Global.putInt(mContentResolver, TETHER_ENABLE_LEGACY_DHCP_SERVER, 1); mTethering = makeTethering(); final NetworkState upstreamState = buildMobileIPv4UpstreamState(); runUsbTethering(upstreamState); sendIPv6TetherUpdates(upstreamState); verify(mDhcpServer, never()).start(); } } @Test @Test Loading @@ -620,6 +648,7 @@ public class TetheringTest { verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mRouterAdvertisementDaemon, times(1)).start(); verify(mRouterAdvertisementDaemon, times(1)).start(); verify(mDhcpServer, times(1)).start(); sendIPv6TetherUpdates(upstreamState); sendIPv6TetherUpdates(upstreamState); verify(mRouterAdvertisementDaemon, times(1)).buildNewRa(any(), notNull()); verify(mRouterAdvertisementDaemon, times(1)).buildNewRa(any(), notNull()); Loading @@ -633,6 +662,7 @@ public class TetheringTest { verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_XLAT_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_XLAT_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mDhcpServer, times(1)).start(); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_XLAT_MOBILE_IFNAME); TEST_XLAT_MOBILE_IFNAME); Loading @@ -649,6 +679,7 @@ public class TetheringTest { runUsbTethering(upstreamState); runUsbTethering(upstreamState); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mDhcpServer, times(1)).start(); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); // Then 464xlat comes up // Then 464xlat comes up Loading @@ -671,6 +702,8 @@ public class TetheringTest { // Forwarding was not re-added for v6 (still times(1)) // Forwarding was not re-added for v6 (still times(1)) verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); // DHCP not restarted on downstream (still times(1)) verify(mDhcpServer, times(1)).start(); } } @Test @Test Loading tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java +0 −9 Original line number Original line Diff line number Diff line Loading @@ -225,13 +225,4 @@ public class TetheringConfigurationTest { final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog); final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog); assertFalse(cfg.enableLegacyDhcpServer); assertFalse(cfg.enableLegacyDhcpServer); } } @Test public void testNewDhcpServerDefault() { Settings.Global.putString(mContentResolver, TETHER_ENABLE_LEGACY_DHCP_SERVER, null); final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog); // TODO: change to false when new server is promoted to default assertTrue(cfg.enableLegacyDhcpServer); } } } Loading
core/java/android/provider/Settings.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -9464,8 +9464,7 @@ public final class Settings { * Use the old dnsmasq DHCP server for tethering instead of the framework implementation. * Use the old dnsmasq DHCP server for tethering instead of the framework implementation. * * * Integer values are interpreted as boolean, and the absence of an explicit setting * Integer values are interpreted as boolean, and the absence of an explicit setting * is interpreted as |true|. * is interpreted as |false|. * TODO: make the default |false| * @hide * @hide */ */ public static final String TETHER_ENABLE_LEGACY_DHCP_SERVER = public static final String TETHER_ENABLE_LEGACY_DHCP_SERVER = Loading
services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -320,9 +320,8 @@ public class TetheringConfiguration { } } private static boolean getEnableLegacyDhcpServer(Context ctx) { private static boolean getEnableLegacyDhcpServer(Context ctx) { // TODO: make the default false (0) and update javadoc in Settings.java final ContentResolver cr = ctx.getContentResolver(); final ContentResolver cr = ctx.getContentResolver(); final int intVal = Settings.Global.getInt(cr, TETHER_ENABLE_LEGACY_DHCP_SERVER, 1); final int intVal = Settings.Global.getInt(cr, TETHER_ENABLE_LEGACY_DHCP_SERVER, 0); return intVal != 0; return intVal != 0; } } Loading
tests/net/java/com/android/server/connectivity/TetheringTest.java +36 −3 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_INTERFACE_NAME; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_MODE; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_MODE; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE; import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED; import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED; import static android.provider.Settings.Global.TETHER_ENABLE_LEGACY_DHCP_SERVER; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue; Loading Loading @@ -75,6 +76,8 @@ import android.net.NetworkRequest; import android.net.NetworkState; import android.net.NetworkState; import android.net.NetworkUtils; import android.net.NetworkUtils; import android.net.RouteInfo; import android.net.RouteInfo; import android.net.dhcp.DhcpServer; import android.net.dhcp.DhcpServingParams; import android.net.ip.IpServer; import android.net.ip.IpServer; import android.net.ip.RouterAdvertisementDaemon; import android.net.ip.RouterAdvertisementDaemon; import android.net.util.InterfaceParams; import android.net.util.InterfaceParams; Loading @@ -85,6 +88,7 @@ import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Bundle; import android.os.Handler; import android.os.Handler; import android.os.INetworkManagementService; import android.os.INetworkManagementService; import android.os.Looper; import android.os.PersistableBundle; import android.os.PersistableBundle; import android.os.RemoteException; import android.os.RemoteException; import android.os.test.TestLooper; import android.os.test.TestLooper; Loading Loading @@ -146,6 +150,7 @@ public class TetheringTest { @Mock private UpstreamNetworkMonitor mUpstreamNetworkMonitor; @Mock private UpstreamNetworkMonitor mUpstreamNetworkMonitor; @Mock private IPv6TetheringCoordinator mIPv6TetheringCoordinator; @Mock private IPv6TetheringCoordinator mIPv6TetheringCoordinator; @Mock private RouterAdvertisementDaemon mRouterAdvertisementDaemon; @Mock private RouterAdvertisementDaemon mRouterAdvertisementDaemon; @Mock private DhcpServer mDhcpServer; @Mock private INetd mNetd; @Mock private INetd mNetd; private final MockTetheringDependencies mTetheringDependencies = private final MockTetheringDependencies mTetheringDependencies = Loading Loading @@ -240,6 +245,12 @@ public class TetheringTest { public INetd getNetdService() { public INetd getNetdService() { return mNetd; return mNetd; } } @Override public DhcpServer makeDhcpServer(Looper looper, InterfaceParams iface, DhcpServingParams params, SharedLog log) { return mDhcpServer; } }; }; } } Loading Loading @@ -333,6 +344,7 @@ public class TetheringTest { mServiceContext = new MockContext(mContext); mServiceContext = new MockContext(mContext); mContentResolver = new MockContentResolver(mServiceContext); mContentResolver = new MockContentResolver(mServiceContext); mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); Settings.Global.putInt(mContentResolver, TETHER_ENABLE_LEGACY_DHCP_SERVER, 0); mIntents = new Vector<>(); mIntents = new Vector<>(); mBroadcastReceiver = new BroadcastReceiver() { mBroadcastReceiver = new BroadcastReceiver() { @Override @Override Loading @@ -343,10 +355,14 @@ public class TetheringTest { mServiceContext.registerReceiver(mBroadcastReceiver, mServiceContext.registerReceiver(mBroadcastReceiver, new IntentFilter(ACTION_TETHER_STATE_CHANGED)); new IntentFilter(ACTION_TETHER_STATE_CHANGED)); mTetheringDependencies.reset(); mTetheringDependencies.reset(); mTethering = new Tethering(mServiceContext, mNMService, mStatsService, mPolicyManager, mTethering = makeTethering(); verify(mNMService).registerTetheringStatsProvider(any(), anyString()); } private Tethering makeTethering() { return new Tethering(mServiceContext, mNMService, mStatsService, mPolicyManager, mLooper.getLooper(), mSystemProperties, mLooper.getLooper(), mSystemProperties, mTetheringDependencies); mTetheringDependencies); verify(mNMService).registerTetheringStatsProvider(any(), anyString()); } } @After @After Loading Loading @@ -597,6 +613,18 @@ public class TetheringTest { sendIPv6TetherUpdates(upstreamState); sendIPv6TetherUpdates(upstreamState); verify(mRouterAdvertisementDaemon, never()).buildNewRa(any(), notNull()); verify(mRouterAdvertisementDaemon, never()).buildNewRa(any(), notNull()); verify(mDhcpServer, times(1)).start(); } @Test public void workingMobileUsbTethering_IPv4LegacyDhcp() { Settings.Global.putInt(mContentResolver, TETHER_ENABLE_LEGACY_DHCP_SERVER, 1); mTethering = makeTethering(); final NetworkState upstreamState = buildMobileIPv4UpstreamState(); runUsbTethering(upstreamState); sendIPv6TetherUpdates(upstreamState); verify(mDhcpServer, never()).start(); } } @Test @Test Loading @@ -620,6 +648,7 @@ public class TetheringTest { verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mRouterAdvertisementDaemon, times(1)).start(); verify(mRouterAdvertisementDaemon, times(1)).start(); verify(mDhcpServer, times(1)).start(); sendIPv6TetherUpdates(upstreamState); sendIPv6TetherUpdates(upstreamState); verify(mRouterAdvertisementDaemon, times(1)).buildNewRa(any(), notNull()); verify(mRouterAdvertisementDaemon, times(1)).buildNewRa(any(), notNull()); Loading @@ -633,6 +662,7 @@ public class TetheringTest { verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_XLAT_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_XLAT_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mDhcpServer, times(1)).start(); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_XLAT_MOBILE_IFNAME); TEST_XLAT_MOBILE_IFNAME); Loading @@ -649,6 +679,7 @@ public class TetheringTest { runUsbTethering(upstreamState); runUsbTethering(upstreamState); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mDhcpServer, times(1)).start(); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); // Then 464xlat comes up // Then 464xlat comes up Loading @@ -671,6 +702,8 @@ public class TetheringTest { // Forwarding was not re-added for v6 (still times(1)) // Forwarding was not re-added for v6 (still times(1)) verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).enableNat(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); verify(mNMService, times(1)).startInterfaceForwarding(TEST_USB_IFNAME, TEST_MOBILE_IFNAME); // DHCP not restarted on downstream (still times(1)) verify(mDhcpServer, times(1)).start(); } } @Test @Test Loading
tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java +0 −9 Original line number Original line Diff line number Diff line Loading @@ -225,13 +225,4 @@ public class TetheringConfigurationTest { final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog); final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog); assertFalse(cfg.enableLegacyDhcpServer); assertFalse(cfg.enableLegacyDhcpServer); } } @Test public void testNewDhcpServerDefault() { Settings.Global.putString(mContentResolver, TETHER_ENABLE_LEGACY_DHCP_SERVER, null); final TetheringConfiguration cfg = new TetheringConfiguration(mMockContext, mLog); // TODO: change to false when new server is promoted to default assertTrue(cfg.enableLegacyDhcpServer); } } }