diff options
author | Xiao Ma <xiaom@google.com> | 2019-07-16 19:16:39 +0900 |
---|---|---|
committer | Xiao Ma <xiaom@google.com> | 2019-08-18 16:42:53 +0900 |
commit | 1ef8fd87412d8f51950ffebf99fd34566fb9bc74 (patch) | |
tree | c92b54f8bb66d4f6814dc96f03e3c7784cfcd836 /src/android/net/ip/IpClient.java | |
parent | c80a667b36f6f9622e07156f40e3b91b33a18455 (diff) |
Restore the default interface MTU when disconnecting from Wi-Fi AP.
Bug: 113350007
Test: atest FrameworksNetTests NetworkStackTests
Test: atest NetworkStackIntegrationTests
Test: manual test
Change-Id: I709a504885033a330b946de402a261d341f78117
Diffstat (limited to 'src/android/net/ip/IpClient.java')
-rw-r--r-- | src/android/net/ip/IpClient.java | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java index 24f985a..45bdff3 100644 --- a/src/android/net/ip/IpClient.java +++ b/src/android/net/ip/IpClient.java @@ -48,6 +48,7 @@ import android.os.ConditionVariable; import android.os.IBinder; import android.os.Message; import android.os.RemoteException; +import android.os.ServiceSpecificException; import android.os.SystemClock; import android.text.TextUtils; import android.util.LocalLog; @@ -850,10 +851,12 @@ public class IpClient extends StateMachine { return shouldLog; } + private void logError(String fmt, Throwable e, Object... args) { + mLog.e(String.format(fmt, args), e); + } + private void logError(String fmt, Object... args) { - final String msg = "ERROR " + String.format(fmt, args); - Log.e(mTag, msg); - mLog.log(msg); + logError(fmt, null, args); } // This needs to be called with care to ensure that our LinkProperties @@ -1274,6 +1277,28 @@ public class IpClient extends StateMachine { // TODO : implement this } + private void maybeRestoreInterfaceMtu() { + InterfaceParams params = mDependencies.getInterfaceParams(mInterfaceName); + if (params == null) { + Log.w(mTag, "interface: " + mInterfaceName + " is gone"); + return; + } + + if (params.index != mInterfaceParams.index) { + Log.w(mTag, "interface: " + mInterfaceName + " has a different index: " + params.index); + return; + } + + if (params.defaultMtu != mInterfaceParams.defaultMtu) { + try { + mNetd.interfaceSetMtu(mInterfaceName, mInterfaceParams.defaultMtu); + } catch (RemoteException | ServiceSpecificException e) { + logError("Couldn't reset MTU on " + mInterfaceName + " from " + + params.defaultMtu + " to " + mInterfaceParams.defaultMtu, e); + } + } + } + class StoppedState extends State { @Override public void enter() { @@ -1351,6 +1376,9 @@ public class IpClient extends StateMachine { // There's no DHCPv4 for which to wait; proceed to stopped. deferMessage(obtainMessage(CMD_JUMP_STOPPING_TO_STOPPED)); } + + // Restore the interface MTU to initial value if it has changed. + maybeRestoreInterfaceMtu(); } @Override |