summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorXiao Ma <xiaom@google.com>2019-07-16 19:16:39 +0900
committerXiao Ma <xiaom@google.com>2019-08-18 16:42:53 +0900
commit1ef8fd87412d8f51950ffebf99fd34566fb9bc74 (patch)
treec92b54f8bb66d4f6814dc96f03e3c7784cfcd836 /src
parentc80a667b36f6f9622e07156f40e3b91b33a18455 (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')
-rw-r--r--src/android/net/ip/IpClient.java34
-rw-r--r--src/com/android/server/util/NetworkStackConstants.java2
2 files changed, 33 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
diff --git a/src/com/android/server/util/NetworkStackConstants.java b/src/com/android/server/util/NetworkStackConstants.java
index 804765e..3174a9b 100644
--- a/src/com/android/server/util/NetworkStackConstants.java
+++ b/src/com/android/server/util/NetworkStackConstants.java
@@ -54,6 +54,7 @@ public final class NetworkStackConstants {
public static final int ETHER_TYPE_IPV4 = 0x0800;
public static final int ETHER_TYPE_IPV6 = 0x86dd;
public static final int ETHER_HEADER_LEN = 14;
+ public static final int ETHER_MTU = 1500;
/**
* ARP constants.
@@ -97,6 +98,7 @@ public final class NetworkStackConstants {
public static final int IPV6_PROTOCOL_OFFSET = 6;
public static final int IPV6_SRC_ADDR_OFFSET = 8;
public static final int IPV6_DST_ADDR_OFFSET = 24;
+ public static final int IPV6_MIN_MTU = 1280;
/**
* ICMPv6 constants.