#!/bin/bash

set -eu
set -o pipefail

sysctl-set-value net.ipv4.tcp_max_tw_buckets 5800000
sysctl-set-value net.ipv4.tcp_max_orphans 5800000
sysctl-set-value net.ipv4.tcp_max_syn_backlog 40960
sysctl-set-value net.ipv4.tcp_keepalive_time 300
sysctl-set-value net.ipv4.tcp_tw_recycle 0
sysctl-set-value net.ipv4.tcp_tw_reuse 1
sysctl-set-value net.ipv4.tcp_timestamps 0
sysctl-set-value net.ipv4.tcp_ecn 0
sysctl-set-value net.ipv4.tcp_sack 0
sysctl-set-value net.ipv4.tcp_dsack 0
sysctl-set-value net.ipv4.netfilter.ip_conntrack_max 1524288
sysctl-set-value net.core.somaxconn 40960
sysctl-set-value net.ipv4.tcp_synack_retries 3
sysctl-set-value net.core.netdev_max_backlog 40960
sysctl-set-value fs.file-max 1048576
sysctl-set-value net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait 5
sysctl-set-value net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait 5
sysctl-set-value net.ipv4.tcp_fin_timeout 5
sysctl-set-value net.ipv4.ip_nonlocal_bind 1

# Currently the tripleo-image-elements sysctl element can't handle multi-value
# settings, so I will set them manually here
NAME=net.ipv4.tcp_rmem
VALUE="16384 65536 524288"
FILENAME="/etc/sysctl.d/${NAME}.conf"
cat > $FILENAME <<EOF_CAT
$NAME = $VALUE
EOF_CAT

NAME=net.ipv4.tcp_wmem
VALUE="16384 349520 699040"
FILENAME="/etc/sysctl.d/${NAME}.conf"
cat > $FILENAME <<EOF_CAT
$NAME = $VALUE
EOF_CAT

NAME=net.ipv4.ip_local_port_range
VALUE="1024 65000"
FILENAME="/etc/sysctl.d/${NAME}.conf"
cat > $FILENAME <<EOF_CAT
$NAME = $VALUE
EOF_CAT
