Loading services/core/java/com/android/server/ConnectivityService.java +8 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading @@ -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); } Loading tests/net/java/com/android/server/ConnectivityServiceTest.java +32 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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; } Loading Loading @@ -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); Loading Loading @@ -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); } } Loading
services/core/java/com/android/server/ConnectivityService.java +8 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading @@ -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); } Loading
tests/net/java/com/android/server/ConnectivityServiceTest.java +32 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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; } Loading Loading @@ -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); Loading Loading @@ -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); } }