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

3
  • 1
  • perfect, however, any way to set this setting in /etc/sysctl.conf ?
    – CMag
    Oct 24, 2013 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. Oct 24, 2013 at 22:50

4 Answers 4

5

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.

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.

2
  • What if its a different interface that you want to change the setting of, other than the default one?
    – UpTheCreek
    Nov 4, 2014 at 7: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 5, 2014 at 9: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.

1
  • 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, 2022 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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .