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:
Hansen Kurli
2022-12-07 11:21:49 +00:00
parent edbf34a182
commit 0425203152
2 changed files with 10 additions and 10 deletions

View File

@@ -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;
}

View File

@@ -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));
}
}