#!/bin/bash

install_bbrplus() {
    # 检查内核版本是否 >= 4.9
    KERNEL_VER=$(uname -r | awk -F "-" '{print $1}')
    KERNEL_MAJOR=$(echo $KERNEL_VER | cut -d. -f1)
    KERNEL_MINOR=$(echo $KERNEL_VER | cut -d. -f2)

    if [[ $KERNEL_MAJOR -lt 4 ]] || { [[ $KERNEL_MAJOR -eq 4 ]] && [[ $KERNEL_MINOR -lt 9 ]]; }; then
        echo "当前内核版本 $KERNEL_VER 低于 4.9，建议升级内核后再启用 BBR Plus"
        exit 1
    fi

    echo "开启 BBR Plus..."

    # 备份 sysctl.conf
    cp /etc/sysctl.conf /etc/sysctl.conf.bak_$(date +%F_%T)

    # 修改 sysctl 配置，先删除相关旧配置避免重复
    sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf
    sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf

    # 添加新的配置
    cat >> /etc/sysctl.conf << EOF

# 开启 BBR Plus (BBR + fq)
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

    sysctl -p

    echo -e "\n当前默认队列规则:"
    sysctl net.core.default_qdisc
    echo "当前 TCP 拥塞控制算法:"
    sysctl net.ipv4.tcp_congestion_control

    echo -e "\n查看是否加载 bbr 模块:"
    lsmod | grep bbr

    echo "BBR Plus 启用完成。"
}

uninstall_bbrplus() {
    echo "卸载 BBR Plus，恢复默认配置..."

    # 备份 sysctl.conf
    cp /etc/sysctl.conf /etc/sysctl.conf.bak_$(date +%F_%T)

    # 删除相关配置
    sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf
    sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf

    # 设置为默认值（根据内核版本可能不同，使用常见默认值）
    cat >> /etc/sysctl.conf << EOF

# 恢复默认队列规则和拥塞控制
net.core.default_qdisc=pfifo_fast
net.ipv4.tcp_congestion_control=cubic
EOF

    sysctl -p

    echo -e "\n当前默认队列规则:"
    sysctl net.core.default_qdisc
    echo "当前 TCP 拥塞控制算法:"
    sysctl net.ipv4.tcp_congestion_control

    echo "BBR Plus 已卸载，恢复默认配置。"
}

echo "请选择操作："
echo "1) 安装并开启 BBR Plus"
echo "2) 卸载 BBR Plus 并恢复默认"
echo "0) 退出"

read -rp "请输入数字 [0-2]: " choice

case "$choice" in
    1)
        install_bbrplus
        ;;
    2)
        uninstall_bbrplus
        ;;
    0)
        echo "退出脚本"
        exit 0
        ;;
    *)
        echo "无效输入，退出"
        exit 1
        ;;
esac
