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.