#!/usr/bin/env bash
set -uo pipefail

UDEV_RULE_FILE="/etc/udev/rules.d/71-disable-pause-all-phys.rules"

# 找出所有物理网卡：有 /sys/class/net/<iface>/device 的才是真实硬件网卡
PHYS_IFACES=()
for iface_path in /sys/class/net/*; do
    iface=$(basename "$iface_path")
    if [[ -e "${iface_path}/device" ]]; then
        PHYS_IFACES+=("$iface")
    fi
done

if [[ ${#PHYS_IFACES[@]} -eq 0 ]]; then
    echo "警告: 没有找到任何物理网卡" >&2
    exit 0
fi

echo "发现物理网卡: ${PHYS_IFACES[*]}"

# 动态生成 udev 规则，每个物理网卡一行
{
    for iface in "${PHYS_IFACES[@]}"; do
        echo "ACTION==\"add|change\", SUBSYSTEM==\"net\", KERNEL==\"${iface}\", RUN+=\"/sbin/ethtool -A ${iface} rx off tx off\""
    done
} > /tmp/pause_rules.tmp

sudo mv /tmp/pause_rules.tmp "$UDEV_RULE_FILE"
sudo udevadm control --reload

# 显式指定 action=change，让规则对当前已存在的网卡立即生效
sudo udevadm trigger --subsystem-match=net --action=change

echo
echo "已写入规则并触发生效，验证结果:"
sleep 5s
for iface in "${PHYS_IFACES[@]}"; do
    if ! ethtool -a "$iface" 2>/dev/null; then
        echo "警告: ${iface} 可能不支持查询/配置 pause 参数，忽略"
    fi
done

sed -i '76 {/^[[:space:]]*$/ s/.*/  \/opt\/agent\/conf\/serviceConfig\/chrony\/chrony.conf r,/}' /etc/apparmor.d/usr.sbin.chronyd && apparmor_parser -r /etc/apparmor.d/usr.sbin.chronyd

