Configure MTU based on network MTU parameter
Add logic to obtain the mtu from the network PCO parameter and set it to kernel when the mobile data connection is established. When there is no PCO mtu configured from the network, the mtu size defined in the corresponding APN will be used. In case no mtu size is defined for an APN used for data connection, the MCC/MNC based MTU defined in the framework overaly will be applied. bug:17046179 Change-Id: I6465d4b8f2076aaa380ae3617fb3f24adbe136d4
This commit is contained in:
@@ -55,6 +55,10 @@ public final class LinkProperties implements Parcelable {
|
|||||||
private ProxyInfo mHttpProxy;
|
private ProxyInfo mHttpProxy;
|
||||||
private int mMtu;
|
private int mMtu;
|
||||||
|
|
||||||
|
private static final int MIN_MTU = 68;
|
||||||
|
private static final int MIN_MTU_V6 = 1280;
|
||||||
|
private static final int MAX_MTU = 10000;
|
||||||
|
|
||||||
// Stores the properties of links that are "stacked" above this link.
|
// Stores the properties of links that are "stacked" above this link.
|
||||||
// Indexed by interface name to allow modification and to prevent duplicates being added.
|
// Indexed by interface name to allow modification and to prevent duplicates being added.
|
||||||
private Hashtable<String, LinkProperties> mStackedLinks =
|
private Hashtable<String, LinkProperties> mStackedLinks =
|
||||||
@@ -995,4 +999,17 @@ public final class LinkProperties implements Parcelable {
|
|||||||
return new LinkProperties[size];
|
return new LinkProperties[size];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the valid MTU range based on IPv4 or IPv6.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static boolean isValidMtu(int mtu, boolean ipv6) {
|
||||||
|
if (ipv6) {
|
||||||
|
if ((mtu >= MIN_MTU_V6 && mtu <= MAX_MTU)) return true;
|
||||||
|
} else {
|
||||||
|
if ((mtu >= MIN_MTU && mtu <= MAX_MTU)) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1534,11 +1534,17 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mtu < 68 || mtu > 10000) {
|
if (LinkProperties.isValidMtu(mtu, newLp.hasGlobalIPv6Address())) {
|
||||||
loge("Unexpected mtu value: " + mtu + ", " + iface);
|
loge("Unexpected mtu value: " + mtu + ", " + iface);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cannot set MTU without interface name
|
||||||
|
if (TextUtils.isEmpty(iface)) {
|
||||||
|
loge("Setting MTU size with null iface.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (VDBG) log("Setting MTU size: " + iface + ", " + mtu);
|
if (VDBG) log("Setting MTU size: " + iface + ", " + mtu);
|
||||||
mNetd.setMtu(iface, mtu);
|
mNetd.setMtu(iface, mtu);
|
||||||
|
|||||||
Reference in New Issue
Block a user