#!/bin/bash
# ========== 3. 管理 /root/run.sh（确保启动时自动修复内核模块） ==========
RUN_SCRIPT="/root/run.sh"

# 3.1 若 run.sh 不存在，尝试从 netns.sh 建立软链接
if [ ! -e "$RUN_SCRIPT" ] && [ -e "/root/netns.sh" ]; then
    ln -sf /root/netns.sh "$RUN_SCRIPT"
    echo "Created symlink /root/run.sh -> /root/netns.sh"
fi

bpftool cgroup detach /sys/fs/cgroup sock_ops pinned /sys/fs/bpf/bbr_switch_510 2>/dev/null || true
rm -f /sys/fs/bpf/bbr_switch_510 || true
# clean akw bpf startup commands
sed -i 's!mount -t cgroup2 none /sys/fs/cgroup 2>/dev/null | true!!' /root/run.sh
sed -i 's!mount -t bpf none /sys/fs/bpf 2>/dev/null | true!!' /root/run.sh
sed -i 's!bpftool prog load bbr_switch_510.bpf.o /sys/fs/bpf/bbr_switch_510 type sockops!!' /root/run.sh
sed -i 's!bpftool cgroup attach /sys/fs/cgroup sock_ops pinned /sys/fs/bpf/bbr_switch_510!!' /root/run.sh


# ========== 1. 安装并启用 brutal 内核模块（一次性配置） ==========
echo "=== Installing brutal kernel module ==="
if lsmod | grep -q "^tcp_brutal"; then
    echo "brutal module already loaded, skipping installation."
else
    apt install dkms linux-headers-$(uname -r) -y
    curl -Ls https://raw.githubusercontent.com/nkeonkeo/tcp-brutal/refs/heads/master/scripts/install_dkms.sh | TERM=xterm bash
    modprobe brutal || true
fi

sysctl -w net.ipv4.tcp_congestion_control=brutal
sysctl -w net.ipv4.tcp_brutal_default_rate=125000000
sysctl -w net.ipv4.tcp_brutal_loss_slow_thresh=50

SYSCTL_CONF="/etc/sysctl.conf"
for param in "net.ipv4.tcp_congestion_control=brutal" \
             "net.ipv4.tcp_brutal_default_rate=125000000" \
             "net.ipv4.tcp_brutal_loss_slow_thresh=50"; do
    key="${param%=*}"
    if grep -q "^$key" "$SYSCTL_CONF"; then
        sed -i "s/^$key=.*/$param/" "$SYSCTL_CONF"
    else
        echo "$param" >> "$SYSCTL_CONF"
    fi
done
echo "=== brutal setup finished ==="



# 3.2 定义需要在 run.sh 开头插入的模块修复代码（避免重复插入）
read -r -d '' MODULE_FIX_CODE << 'EOF' || true
# ===== brutal 模块自动修复（内核升级后恢复） =====
if ! lsmod | grep -q "^brutal" && ! modprobe brutal 2>/dev/null; then
    echo "brutal module missing, trying DKMS rebuild..."
    dkms autoinstall
fi
# ==============================================
EOF

# 3.3 将修复代码插入到 run.sh 开头（如果尚未包含）
if [ -f "$RUN_SCRIPT" ]; then
    if ! grep -q "brutal 模块自动修复" "$RUN_SCRIPT"; then
        # 备份原文件并插入修复代码
        tmp_file=$(mktemp)
        echo "$MODULE_FIX_CODE" > "$tmp_file"
        cat "$RUN_SCRIPT" >> "$tmp_file"
        mv "$tmp_file" "$RUN_SCRIPT"
        echo "Inserted brutal recovery code into $RUN_SCRIPT"
    else
        echo "Recovery code already present in $RUN_SCRIPT, skipping insert."
    fi
else
    echo '-----------------------------'
    echo '---- not default run env ----'
    echo '-----------------------------'

fi



echo "=== All tasks completed ==="