Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51b1e458 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Call netd to update the tcp buffer size"

parents 462331f4 7f14dbc3
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -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);
        }

+32 −2
Original line number Diff line number Diff line
@@ -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);
    }
}