diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/android/net/ip/IpClient.java | 34 | ||||
-rw-r--r-- | src/com/android/server/util/NetworkStackConstants.java | 2 |
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. |