xinali
5/25/2018 - 4:54 AM

Ubuntu enable BBR

Ubuntu enable BBR

#!/bin/bash
set -eu

SYSCTL_FILE=/etc/sysctl.d/90-tcp-bbr.conf

# check root
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi

# check OS version
source /etc/lsb-release
KERNEL_VERSION=$(uname -r)

if [ "$DISTRIB_ID" != "Ubuntu" ]; then
   echo "This script must be run under Ubuntu" 
   exit 1
fi

# install newest kernel
if [ "$DISTRIB_RELEASE" == "12.04" ]; then
    apt-get update -y
    apt-get install -y --install-recommends linux-generic-lts-trusty
    apt-get autoremove -y
elif [ "$DISTRIB_RELEASE" == "14.04" ]; then
    apt-get update -y
    apt-get install -y --install-recommends linux-generic-lts-xenial
    apt-get autoremove -y
elif [ "$DISTRIB_RELEASE" == "16.04" ]; then
    apt-get update -y
    apt-get install -y --install-recommends linux-generic-hwe-16.04
    apt-get autoremove -y
else
    # check kernel version
    if dpkg --compare-versions "$KERNEL_VERSION" "ge" "4.9"; then
        echo "WARNING: Non-LTS versions are not supported. Continuing since you have a compatible kernel."
    else
        echo "ERROR: Kernel auto install on Non-LTS versions is not supported. Please manually install kernel >= 4.9."
        exit 1
    fi
fi

if grep -q "tcp_bbr" "/etc/modules-load.d/modules.conf"; then
    echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
fi

echo "Current configuration: "
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

# apply new config
if ! grep -q "net.core.default_qdisc=fq" "$SYSCTL_FILE"; then
    echo "net.core.default_qdisc=fq" >> $SYSCTL_FILE
fi
if ! grep -q "net.ipv4.tcp_congestion_control=bbr" "$SYSCTL_FILE"; then
    echo "net.ipv4.tcp_congestion_control=bbr" >> $SYSCTL_FILE
fi

# check if we can apply the config now
if lsmod | grep -q "tcp_bbr"; then
    sysctl -p $SYSCTL_FILE
    echo "BBR is available now."
elif modprobe tcp_bbr; then
    sysctl -p $SYSCTL_FILE
    echo "BBR is available now."
else
    echo "Please reboot to enable BBR."
fi