@@ -48,20 +48,39 @@ retry() {
4848# 用 systemd-analyze plot >a.svg 发现 sys-subsystem-net-devices-enp3s0.device 也是出现在 NetworkManager 之后
4949# 因此需要等待网卡出现
5050get_ethx_by_mac () {
51- mac=$( echo " $1 " | to_lower)
52- retry 10 _get_ethx_by_mac " $mac "
51+ retry 10 _get_ethx_by_mac " $@ "
5352}
5453
5554_get_ethx_by_mac () {
55+ mac=$( echo " $1 " | to_lower)
56+
57+ flag=$2
58+ if [ -z " $flag " ]; then
59+ flag=master
60+ fi
61+
5662 if true ; then
57- # 过滤 azure vf (带 master ethx)
58- ip -o link | grep -i " $mac " | grep -v master | awk ' {print $2}' | cut -d: -f1 | grep .
59- return
63+ if [ " $flag " = master ]; then
64+ # master
65+ # 过滤 azure vf (带 master ethx)
66+ ip -o link | grep -i " $mac " | grep -v master | awk ' {print $2}' | cut -d: -f1 | grep .
67+ else
68+ # slave
69+ # 带 master ethx
70+ ip -o link | grep -i " $mac " | grep -w master | awk ' {print $2}' | cut -d: -f1 | grep .
71+ fi
6072 else
6173 for i in $( cd /sys/class/net && echo * ) ; do
6274 if [ " $( cat " /sys/class/net/$i /address" ) " = " $mac " ]; then
63- echo " $i "
64- return
75+ if [ $(( $(cat "/ sys/ class/ net/ $i / flags") & 0x800 )) -ne 0 ]; then
76+ fact_flag=slave
77+ else
78+ fact_flag=master
79+ fi
80+ if [ " $flag " = " $fact_flag " ]; then
81+ echo " $i "
82+ return
83+ fi
6584 fi
6685 done
6786 return 1
@@ -138,6 +157,23 @@ fix_network_manager() {
138157
139158 # 更改文件名
140159 mv " $file " " $proper_file "
160+
161+ # NM 不会自动忽略 Azure 的 slave 网卡,需手动设置
162+ # azure 文档中的方法不够通用,只适合 azure
163+ # https://learn.microsoft.com/zh-cn/azure/virtual-network/accelerated-networking-overview
164+
165+ # 我们采用红帽的方法
166+ # 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
167+ if slave_ethx=$( get_ethx_by_mac " $mac " slave) ; then
168+ cat > " /etc/NetworkManager/conf.d/99-$slave_ethx -unmanaged.conf" << EOF
169+ [device-$slave_ethx -unmanaged]
170+ match-device=interface-name:$slave_ethx
171+ managed=0
172+ EOF
173+ fi
174+
175+ # 也可以设置 unmanaged-devices, 但是官方文档不推荐
176+ # https://networkmanager.pages.freedesktop.org/NetworkManager/NetworkManager/NetworkManager.conf.html#:~:text=may%20be%20a-,better%20choice,-.
141177 done
142178}
143179
0 commit comments