linux initcwnd and initrwnd via /etc/sysctl.conf

Folks, As we know, the 3.x kernels have higher TCP default connection values, such as initcwnd and initrwnd. For 2.x friends, is there a way to set these in /etc/sysctl.conf instead of the ip route way?

Instead of the following:

sudo ip route change default via 192.168.1.1 dev eth0  proto static initcwnd 10

Is there a way to set the same in /etc/sysctl.conf?

Thanks


Solution 1:

Not quite answering the question but in December 2017 support for changing these values was added to systemd-networkd so you can now put this in /etc/systemd/network/*.network to make it persistent:

[Route]
Gateway=_dhcp4
InitialCongestionWindow=10          # initcwnd
InitialAdvertisedReceiveWindow=10   # initrwnd

The Gateway=_dhcp4 line is needed if you want the [Route] section to apply to the gateway supplied via DHCP. Otherwise add the Initial* lines to your existing [Route] section where you manually specify your gateway address.

Solution 2:

By "via sysctl.conf" do you actually mean you want the settings to apply every boot?

If so, you can write /sbin/ifup-local to run any commands as the last part of the interface start. The ifup script calls this with the interface name as a parameter.

So your /sbin/ifup-local could contain:

#!/bin/bash
if [[ "$1" == "eth0" ]]
then
  ip route change default via 192.168.1.1 dev eth0 proto static initcwnd 10
fi

At least this works on RHEL/CentOS. I have not tried Deb/Ubu/others.

Solution 3:

In case of CentOS 7 the script called in ifup is /sbin/ifup-pre-local . So i just made the script /sbin/ifup-pre-local :

#!/bin/bash

defrt=`ip route | grep "^default" | head -1`
ip route change $defrt initcwnd 10

And the initcwnd is set in all reboots and network restart.