Clear IPv4 address on tethering teardown.

Test: as follows
    - built
    - flashed
    - booted
    - runtest frameworks-net passes
    - wlan0 in STA mode, wlan1 up/down in AP mode
      no lingering IPv4 mode
    - USB tethering up/down works
    - bluetooth tethering yields:
05-18 17:50:49.726   719   756 D TetherController: untetherInterface(bt-pan)
05-18 17:50:49.729  1194  1230 E Tethering: [bt-pan] ERROR Failed to clear IPv4 address on interface bt-pan: java.lang.IllegalStateException: command '224 interface setcfg bt-pan 0.0.0.0 0' failed with '400 224 Failed to clear address (No such device)'
      which is acceptable (no actual crash, just a log message)
Bug: 79905644
Merged-In: Ie898adc4efbb7376f0297abacdfe39c8700f0722
Merged-In: I9eb44eaf4e99fa85fff2909524ee88673bdcf1fd
Merged-In: Iaf29788a6692d810f3160e3f21d06b7452ecbaa6

(cherry picked from commit 472276a874)

Change-Id: Icb5c4f7971af4715c7662f80194b4c1ce369a135
This commit is contained in:
Erik Kline
2018-05-18 16:09:24 +09:00
parent 59ccf1041f
commit f8bba5bfc7
3 changed files with 12 additions and 4 deletions

View File

@@ -185,7 +185,12 @@ public class TetherInterfaceStateMachine extends StateMachine {
private boolean startIPv4() { return configureIPv4(true); }
private void stopIPv4() { configureIPv4(false); }
private void stopIPv4() {
configureIPv4(false);
// NOTE: All of configureIPv4() will be refactored out of existence
// into calls to InterfaceController, shared with startIPv4().
mInterfaceCtrl.clearIPv4Address();
}
// TODO: Refactor this in terms of calls to InterfaceController.
private boolean configureIPv4(boolean enabled) {

View File

@@ -779,11 +779,12 @@ public class TetheringTest {
sendWifiApStateChanged(WIFI_AP_STATE_ENABLED, TEST_WLAN_IFNAME, IFACE_IP_MODE_TETHERED);
mLooper.dispatchAll();
// We verify get/set called twice here: once for setup and once during
// We verify get/set called thrice here: once for setup and twice during
// teardown because all events happen over the course of the single
// dispatchAll() above.
// dispatchAll() above. Note that once the TISM IPv4 address config
// code is refactored the two calls during shutdown will revert to one.
verify(mNMService, times(2)).getInterfaceConfig(TEST_WLAN_IFNAME);
verify(mNMService, times(2))
verify(mNMService, times(3))
.setInterfaceConfig(eq(TEST_WLAN_IFNAME), any(InterfaceConfiguration.class));
verify(mNMService, times(1)).tetherInterface(TEST_WLAN_IFNAME);
verify(mWifiManager).updateInterfaceIpState(

View File

@@ -173,6 +173,7 @@ public class TetherInterfaceStateMachineTest {
dispatchCommand(TetherInterfaceStateMachine.CMD_TETHER_UNREQUESTED);
InOrder inOrder = inOrder(mNMService, mStatsService, mTetherHelper);
inOrder.verify(mNMService).untetherInterface(IFACE_NAME);
inOrder.verify(mNMService).setInterfaceConfig(eq(IFACE_NAME), any());
inOrder.verify(mTetherHelper).updateInterfaceState(
mTestedSm, STATE_AVAILABLE, TETHER_ERROR_NO_ERROR);
inOrder.verify(mTetherHelper).updateLinkProperties(
@@ -270,6 +271,7 @@ public class TetherInterfaceStateMachineTest {
inOrder.verify(mNMService).stopInterfaceForwarding(IFACE_NAME, UPSTREAM_IFACE);
inOrder.verify(mNMService).disableNat(IFACE_NAME, UPSTREAM_IFACE);
inOrder.verify(mNMService).untetherInterface(IFACE_NAME);
inOrder.verify(mNMService).setInterfaceConfig(eq(IFACE_NAME), any());
inOrder.verify(mTetherHelper).updateInterfaceState(
mTestedSm, STATE_AVAILABLE, TETHER_ERROR_NO_ERROR);
inOrder.verify(mTetherHelper).updateLinkProperties(