Merge "Call netd to update the tcp buffer size"
am: a3713ac30d
Change-Id: I217b1cc4afd886b449e532a7bde26bc9a5167277
This commit is contained in:
@@ -274,7 +274,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
private int mDefaultInetConditionPublished = 0;
|
private int mDefaultInetConditionPublished = 0;
|
||||||
|
|
||||||
private INetworkManagementService mNMS;
|
private INetworkManagementService mNMS;
|
||||||
private INetd mNetd;
|
@VisibleForTesting
|
||||||
|
protected INetd mNetd;
|
||||||
private INetworkStatsService mStatsService;
|
private INetworkStatsService mStatsService;
|
||||||
private INetworkPolicyManager mPolicyManager;
|
private INetworkPolicyManager mPolicyManager;
|
||||||
private NetworkPolicyManagerInternal mPolicyManagerInternal;
|
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";
|
private static final String DEFAULT_TCP_RWND_KEY = "net.tcp.default_init_rwnd";
|
||||||
|
|
||||||
// Overridden for testing purposes to avoid writing to SystemProperties.
|
// Overridden for testing purposes to avoid writing to SystemProperties.
|
||||||
@@ -2116,15 +2118,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
try {
|
try {
|
||||||
if (VDBG || DDBG) Slog.d(TAG, "Setting tx/rx TCP buffers to " + tcpBufferSizes);
|
if (VDBG || DDBG) Slog.d(TAG, "Setting tx/rx TCP buffers to " + tcpBufferSizes);
|
||||||
|
|
||||||
final String prefix = "/sys/kernel/ipv4/tcp_";
|
String rmemValues = String.join(" ", values[0], values[1], values[2]);
|
||||||
FileUtils.stringToFile(prefix + "rmem_min", values[0]);
|
String wmemValues = String.join(" ", values[3], values[4], values[5]);
|
||||||
FileUtils.stringToFile(prefix + "rmem_def", values[1]);
|
mNetd.setTcpRWmemorySize(rmemValues, wmemValues);
|
||||||
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]);
|
|
||||||
mCurrentTcpBufferSizes = tcpBufferSizes;
|
mCurrentTcpBufferSizes = tcpBufferSizes;
|
||||||
} catch (IOException e) {
|
} catch (RemoteException | ServiceSpecificException e) {
|
||||||
loge("Can't set TCP buffer sizes:" + 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.PacketKeepaliveCallback;
|
||||||
import android.net.ConnectivityManager.TooManyRequestsException;
|
import android.net.ConnectivityManager.TooManyRequestsException;
|
||||||
import android.net.ConnectivityThread;
|
import android.net.ConnectivityThread;
|
||||||
|
import android.net.INetd;
|
||||||
import android.net.INetworkPolicyListener;
|
import android.net.INetworkPolicyListener;
|
||||||
import android.net.INetworkPolicyManager;
|
import android.net.INetworkPolicyManager;
|
||||||
import android.net.INetworkStatsService;
|
import android.net.INetworkStatsService;
|
||||||
@@ -228,6 +229,7 @@ public class ConnectivityServiceTest {
|
|||||||
@Mock INetworkManagementService mNetworkManagementService;
|
@Mock INetworkManagementService mNetworkManagementService;
|
||||||
@Mock INetworkStatsService mStatsService;
|
@Mock INetworkStatsService mStatsService;
|
||||||
@Mock INetworkPolicyManager mNpm;
|
@Mock INetworkPolicyManager mNpm;
|
||||||
|
@Mock INetd mMockNetd;
|
||||||
|
|
||||||
private ArgumentCaptor<String[]> mStringArrayCaptor = ArgumentCaptor.forClass(String[].class);
|
private ArgumentCaptor<String[]> mStringArrayCaptor = ArgumentCaptor.forClass(String[].class);
|
||||||
|
|
||||||
@@ -926,8 +928,9 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
public WrappedConnectivityService(Context context, INetworkManagementService netManager,
|
public WrappedConnectivityService(Context context, INetworkManagementService netManager,
|
||||||
INetworkStatsService statsService, INetworkPolicyManager policyManager,
|
INetworkStatsService statsService, INetworkPolicyManager policyManager,
|
||||||
IpConnectivityLog log) {
|
IpConnectivityLog log, INetd netd) {
|
||||||
super(context, netManager, statsService, policyManager, log);
|
super(context, netManager, statsService, policyManager, log);
|
||||||
|
mNetd = netd;
|
||||||
mLingerDelayMs = TEST_LINGER_DELAY_MS;
|
mLingerDelayMs = TEST_LINGER_DELAY_MS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1087,7 +1090,8 @@ public class ConnectivityServiceTest {
|
|||||||
mNetworkManagementService,
|
mNetworkManagementService,
|
||||||
mStatsService,
|
mStatsService,
|
||||||
mNpm,
|
mNpm,
|
||||||
mock(IpConnectivityLog.class));
|
mock(IpConnectivityLog.class),
|
||||||
|
mMockNetd);
|
||||||
|
|
||||||
final ArgumentCaptor<INetworkPolicyListener> policyListenerCaptor =
|
final ArgumentCaptor<INetworkPolicyListener> policyListenerCaptor =
|
||||||
ArgumentCaptor.forClass(INetworkPolicyListener.class);
|
ArgumentCaptor.forClass(INetworkPolicyListener.class);
|
||||||
@@ -4766,4 +4770,30 @@ public class ConnectivityServiceTest {
|
|||||||
// Clean up
|
// Clean up
|
||||||
mCm.unregisterNetworkCallback(networkCallback);
|
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