#!/usr/bin/env bash
# 仅在 Rocky Linux 10 上启用：网卡 link down 时自动忽略其路由
set -u

. /etc/os-release

# 非 Rocky 10 直接退出，不做任何操作
[[ "${ID:-}" == "rocky" && "${VERSION_ID:-}" == 10* ]] || exit 0

# 保留 root 权限判断
if [[ $EUID -ne 0 ]]; then
    echo "失败：需要 root 权限" >&2
    exit 1
fi

KEY="net.ipv4.conf.all.ignore_routes_with_linkdown"
VAL="1"
LINE="${KEY}=${VAL}"
FILES=(
    "/etc/sysctl.conf"
    "/etc/sysctl.d/99-sysctl.conf"
)

# 运行时生效
if ! sysctl -w "${LINE}" >/dev/null; then
    echo "失败：sysctl 设置 ${LINE} 出错" >&2
    exit 1
fi

# 持久化：仅当文件已存在且其中没有该配置时才追加
for f in "${FILES[@]}"; do
    # 文件不存在则不创建，直接跳过
    if [[ ! -e "$f" ]]; then
        echo "跳过（文件不存在）：$f"
        continue
    fi

    # 只匹配未注释的、与目标完全一致的配置行
    if grep -qE "^[[:space:]]*net\.ipv4\.conf\.all\.ignore_routes_with_linkdown[[:space:]]*=[[:space:]]*1[[:space:]]*$" "$f"; then
        echo "已存在，跳过：$f"
        continue
    fi

    # 文件末尾缺少换行时先补一个，避免追加内容粘到上一行
    if [[ -s "$f" && "$(tail -c1 "$f" | wc -l)" -eq 0 ]]; then
        printf '\n' >> "$f" || { echo "失败：写入 $f 出错" >&2; exit 1; }
    fi

    if ! printf '%s\n' "$LINE" >> "$f"; then
        echo "失败：写入 $f 出错" >&2
        exit 1
    fi
    echo "已追加：$f"
done

echo "成功：已启用 ignore_routes_with_linkdown"
