Ensure MTU is set for new interfaces.
Setting the MTU for an interface should not be skipped when the interface names are different. This occurs when a VPN network creates a new interface with identical MTU. Bug: 246398088 Test: atest ConnectivityServiceTest Test: Manual test: Connect to VPN network and switch networks Test: Confirm MTU of interface is set correctly with `adb shell ip addr` Change-Id: I811a01feca2fb2130c57c6c924145314180434c5
This commit is contained in:
@@ -3116,22 +3116,23 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
private void updateMtu(@NonNull LinkProperties newLp, @Nullable LinkProperties oldLp) {
|
||||
final String iface = newLp.getInterfaceName();
|
||||
final int mtu = newLp.getMtu();
|
||||
if (oldLp == null && mtu == 0) {
|
||||
if (mtu == 0) {
|
||||
// Silently ignore unset MTU value.
|
||||
return;
|
||||
}
|
||||
if (oldLp != null && newLp.isIdenticalMtu(oldLp)) {
|
||||
if (VDBG) log("identical MTU - not setting");
|
||||
if (oldLp != null && newLp.isIdenticalMtu(oldLp)
|
||||
&& TextUtils.equals(oldLp.getInterfaceName(), iface)) {
|
||||
if (VDBG) log("identical MTU and iface - not setting");
|
||||
return;
|
||||
}
|
||||
if (!LinkProperties.isValidMtu(mtu, newLp.hasGlobalIpv6Address())) {
|
||||
if (mtu != 0) loge("Unexpected mtu value: " + mtu + ", " + iface);
|
||||
// Cannot set MTU without interface name
|
||||
if (TextUtils.isEmpty(iface)) {
|
||||
if (VDBG) log("Setting MTU size with null iface.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Cannot set MTU without interface name
|
||||
if (TextUtils.isEmpty(iface)) {
|
||||
loge("Setting MTU size with null iface.");
|
||||
if (!LinkProperties.isValidMtu(mtu, newLp.hasGlobalIpv6Address())) {
|
||||
loge("Unexpected mtu value: " + mtu + ", " + iface);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -17155,7 +17155,6 @@ public class ConnectivityServiceTest {
|
||||
mWiFiNetworkAgent.sendLinkProperties(new LinkProperties(lp2));
|
||||
|
||||
waitForIdle();
|
||||
// TODO(b/246398088): the MTU should be set on the new interface.
|
||||
verify(mMockNetd, never()).interfaceSetMtu(eq(ifaceName2), eq(mtu));
|
||||
verify(mMockNetd).interfaceSetMtu(eq(ifaceName2), eq(mtu));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user