7

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

CMag
  • 687
  • 2
  • 11
  • 31
  • 1
    http://superuser.com/questions/558800/get-the-current-default-value-of-tcp-initcwnd-on-linux – Laszlo Valko Oct 24 '13 at 22:20
  • perfect, however, any way to set this setting in /etc/sysctl.conf ? – CMag Oct 24 '13 at 22:34
  • Nope. The default value is a constant in #define. However, you may be able to persuade your init scripts to install the default route with the parameters you want. For example, on Gentoo, this can be easily achieved. – Laszlo Valko Oct 24 '13 at 22:50

4 Answers4

4

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.

Malvineous
  • 955
  • 7
  • 27
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.

suprjami
  • 3,476
  • 20
  • 29
  • What if its a different interface that you want to change the setting of, other than the default one? – UpTheCreek Nov 04 '14 at 07:54
  • There is no "default interface". The script is called with the device name as a parameter, so you just add/change the `if` condition to match what interface(s) you want to change settings for. – suprjami Nov 05 '14 at 09:04
2

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.

  • on my CentOS 7.9 host, adding route change scripts to `ifup-pre-local` DID NOT work. The interface had to be up first, otherwise the route did not yet exist and therefore could not be changed. I had to use `/sbin/ifup-local`. – guzzijason Mar 18 '22 at 20:12
1

On RHEL/CentOS/Oracle/Scientific Linux and other EL-based distro's:

Easy, just don't specify GATEWAY= in your /etc/sysconfig/network-scripts/ifcfg-eth0 file. Then create a 2nd file called route-eth0 in the same place and write your gateway there:

  default via 192.168.0.1 initcwnd 10 initrwnd 10

This method:

  • Keeps the network configuration in one place, where it should be to it is easy to find in the future and when servers are moved/upgrade.
  • Avoids creating unusual /sbin/ scripts that will be forgotten 10 years in the future
  • Doesn't depend on systemd
KJ7LNW
  • 131
  • 3