Merge "Call netd to update the tcp buffer size"
This commit is contained in:
@@ -274,7 +274,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
private int mDefaultInetConditionPublished = 0;
|
||||
|
||||
private INetworkManagementService mNMS;
|
||||
private INetd mNetd;
|
||||
@VisibleForTesting
|
||||
protected INetd mNetd;
|
||||
private INetworkStatsService mStatsService;
|
||||
private INetworkPolicyManager mPolicyManager;
|
||||
private NetworkPolicyManagerInternal mPolicyManagerInternal;
|
||||
@@ -2090,7 +2091,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
private static final String DEFAULT_TCP_BUFFER_SIZES = "4096,87380,110208,4096,16384,110208";
|
||||
@VisibleForTesting
|
||||
protected static final String DEFAULT_TCP_BUFFER_SIZES = "4096,87380,110208,4096,16384,110208";
|
||||
private static final String DEFAULT_TCP_RWND_KEY = "net.tcp.default_init_rwnd";
|
||||
|
||||
// Overridden for testing purposes to avoid writing to SystemProperties.
|
||||
@@ -2116,15 +2118,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
try {
|
||||
if (VDBG || DDBG) Slog.d(TAG, "Setting tx/rx TCP buffers to " + tcpBufferSizes);
|
||||
|
||||
final String prefix = "/sys/kernel/ipv4/tcp_";
|
||||
FileUtils.stringToFile(prefix + "rmem_min", values[0]);
|
||||
FileUtils.stringToFile(prefix + "rmem_def", values[1]);
|
||||
FileUtils.stringToFile(prefix + "rmem_max", values[2]);
|
||||
FileUtils.stringToFile(prefix + "wmem_min", values[3]);
|
||||
FileUtils.stringToFile(prefix + "wmem_def", values[4]);
|
||||
FileUtils.stringToFile(prefix + "wmem_max", values[5]);
|
||||
String rmemValues = String.join(" ", values[0], values[1], values[2]);
|
||||
String wmemValues = String.join(" ", values[3], values[4], values[5]);
|
||||
mNetd.setTcpRWmemorySize(rmemValues, wmemValues);
|
||||
mCurrentTcpBufferSizes = tcpBufferSizes;
|
||||
} catch (IOException e) {
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
loge("Can't set TCP buffer sizes:" + e);
|
||||
}
|
||||
|
||||
|
||||
@@ -96,6 +96,7 @@ import android.net.ConnectivityManager.PacketKeepalive;
|
||||
import android.net.ConnectivityManager.PacketKeepaliveCallback;
|
||||
import android.net.ConnectivityManager.TooManyRequestsException;
|
||||
import android.net.ConnectivityThread;
|
||||
import android.net.INetd;
|
||||
import android.net.INetworkPolicyListener;
|
||||
import android.net.INetworkPolicyManager;
|
||||
import android.net.INetworkStatsService;
|
||||
@@ -228,6 +229,7 @@ public class ConnectivityServiceTest {
|
||||
@Mock INetworkManagementService mNetworkManagementService;
|
||||
@Mock INetworkStatsService mStatsService;
|
||||
@Mock INetworkPolicyManager mNpm;
|
||||
@Mock INetd mMockNetd;
|
||||
|
||||
private ArgumentCaptor<String[]> mStringArrayCaptor = ArgumentCaptor.forClass(String[].class);
|
||||
|
||||
@@ -926,8 +928,9 @@ public class ConnectivityServiceTest {
|
||||
|
||||
public WrappedConnectivityService(Context context, INetworkManagementService netManager,
|
||||
INetworkStatsService statsService, INetworkPolicyManager policyManager,
|
||||
IpConnectivityLog log) {
|
||||
IpConnectivityLog log, INetd netd) {
|
||||
super(context, netManager, statsService, policyManager, log);
|
||||
mNetd = netd;
|
||||
mLingerDelayMs = TEST_LINGER_DELAY_MS;
|
||||
}
|
||||
|
||||
@@ -1087,7 +1090,8 @@ public class ConnectivityServiceTest {
|
||||
mNetworkManagementService,
|
||||
mStatsService,
|
||||
mNpm,
|
||||
mock(IpConnectivityLog.class));
|
||||
mock(IpConnectivityLog.class),
|
||||
mMockNetd);
|
||||
|
||||
final ArgumentCaptor<INetworkPolicyListener> policyListenerCaptor =
|
||||
ArgumentCaptor.forClass(INetworkPolicyListener.class);
|
||||
@@ -4766,4 +4770,30 @@ public class ConnectivityServiceTest {
|
||||
// Clean up
|
||||
mCm.unregisterNetworkCallback(networkCallback);
|
||||
}
|
||||
|
||||
private static final String TEST_TCP_BUFFER_SIZES = "1,2,3,4,5,6";
|
||||
|
||||
private void verifyTcpBufferSizeChange(String tcpBufferSizes) throws Exception {
|
||||
String[] values = tcpBufferSizes.split(",");
|
||||
String rmemValues = String.join(" ", values[0], values[1], values[2]);
|
||||
String wmemValues = String.join(" ", values[3], values[4], values[5]);
|
||||
waitForIdle();
|
||||
verify(mMockNetd, atLeastOnce()).setTcpRWmemorySize(rmemValues, wmemValues);
|
||||
reset(mMockNetd);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTcpBufferReset() throws Exception {
|
||||
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
|
||||
reset(mMockNetd);
|
||||
// Simple connection should have updated tcp buffer size.
|
||||
mCellNetworkAgent.connect(false);
|
||||
verifyTcpBufferSizeChange(ConnectivityService.DEFAULT_TCP_BUFFER_SIZES);
|
||||
|
||||
// Change link Properties should have updated tcp buffer size.
|
||||
LinkProperties lp = new LinkProperties();
|
||||
lp.setTcpBufferSizes(TEST_TCP_BUFFER_SIZES);
|
||||
mCellNetworkAgent.sendLinkProperties(lp);
|
||||
verifyTcpBufferSizeChange(TEST_TCP_BUFFER_SIZES);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user