From e60a8d0de2e97f2d5a5c5d752d962f317c8cfb88 Mon Sep 17 00:00:00 2001 From: bin456789 Date: Thu, 4 Dec 2025 22:56:16 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E4=BF=AE=E5=A4=8D=20azure=20=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E5=8A=A0=E9=80=9F=E7=BD=91=E7=BB=9C=E6=97=B6=20Networ?= =?UTF-8?q?kManager=20=E6=97=A0=E6=B3=95=E8=8E=B7=E5=8F=96=20IP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #499 --- fix-eth-name.sh | 50 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/fix-eth-name.sh b/fix-eth-name.sh index db32213..959579b 100644 --- a/fix-eth-name.sh +++ b/fix-eth-name.sh @@ -48,20 +48,39 @@ retry() { # 用 systemd-analyze plot >a.svg 发现 sys-subsystem-net-devices-enp3s0.device 也是出现在 NetworkManager 之后 # 因此需要等待网卡出现 get_ethx_by_mac() { - mac=$(echo "$1" | to_lower) - retry 10 _get_ethx_by_mac "$mac" + retry 10 _get_ethx_by_mac "$@" } _get_ethx_by_mac() { + mac=$(echo "$1" | to_lower) + + flag=$2 + if [ -z "$flag" ]; then + flag=master + fi + if true; then - # 过滤 azure vf (带 master ethx) - ip -o link | grep -i "$mac" | grep -v master | awk '{print $2}' | cut -d: -f1 | grep . - return + if [ "$flag" = master ]; then + # master + # 过滤 azure vf (带 master ethx) + ip -o link | grep -i "$mac" | grep -v master | awk '{print $2}' | cut -d: -f1 | grep . + else + # slave + # 带 master ethx + ip -o link | grep -i "$mac" | grep -w master | awk '{print $2}' | cut -d: -f1 | grep . + fi else for i in $(cd /sys/class/net && echo *); do if [ "$(cat "/sys/class/net/$i/address")" = "$mac" ]; then - echo "$i" - return + if [ $(($(cat "/sys/class/net/$i/flags") & 0x800)) -ne 0 ]; then + fact_flag=slave + else + fact_flag=master + fi + if [ "$flag" = "$fact_flag" ]; then + echo "$i" + return + fi fi done return 1 @@ -138,6 +157,23 @@ fix_network_manager() { # 更改文件名 mv "$file" "$proper_file" + + # NM 不会自动忽略 Azure 的 slave 网卡,需手动设置 + # azure 文档中的方法不够通用,只适合 azure + # https://learn.microsoft.com/zh-cn/azure/virtual-network/accelerated-networking-overview + + # 我们采用红帽的方法 + # https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/configuring-networkmanager-to-ignore-certain-devices_configuring-and-managing-networking + if slave_ethx=$(get_ethx_by_mac "$mac" slave); then + cat >"/etc/NetworkManager/conf.d/99-$slave_ethx-unmanaged.conf" <