Networking

MAC地址更改期間是否需要關閉/啟動介面?

  • February 26, 2020

我正在使用帶有自定義核心 4.4.21 的 SuSE 12.2(與實時環境相關的微小更改)。

在 MAC 地址更改期間是否真的需要關閉/啟動介面?我觀察到的是,它並不是真正需要的(更改在啟用的界面上成功,無需將其關閉)。

但是 - 網際網路上的大多數範例都建議關閉介面,然後更改 MAC 地址,然後再重新啟動它,例如howtogeek.com。此過程是否在文件中某處進行了描述?

更改介面的 MAC 地址取決於硬體和驅動程序。當介面啟動時,必須執行更多操作來更新介面的狀態,同時仍在執行。有些驅動程序還不支持它,或者因為介面的硬體不允許這樣的功能。

在介面上區分這種能力的現代方法是IFF_LIVE_ADDR_CHANGE出現在核心 3.6 中的 priv_flag。我不知道在此之前是否有其他機制,以及之前是否有可能。可以只執行一個較舊的核心並檢查什麼在工作。

介紹這個的更新檔是:

2012-06-30網路:引入新的 priv_flag 指示 iface 能夠在執行時更改 mac

引入IFF_LIVE_ADDR_CHANGEpriv_flag 並使用它來禁用 netif_running() 檢查 eth_mac_addr()

正如所料,這個功能是在一些簡單的虛擬設備之後添加的,比如虛擬介面:

2012-06-30 virtio_net:使用IFF_LIVE_ADDR_CHANGEpriv_flag

2012-06-30團隊:使用IFF_LIVE_ADDR_CHANGEpriv_flag

2012-06-30虛擬:使用IFF_LIVE_ADDR_CHANGEpriv_flag

每個驅動程序隨著時間的推移進一步添加此功能的一些範例:

2014-06-10 gre:允許在設備啟動時更改 mac 地址

2018-07-03 r8169:修復 mac 地址更改

這是一個非常舊的3Com Tornado網卡不允許這樣做,我仍然可以使用:

# uname -r
4.19.0-0.bpo.6-686-pae
# ethtool -i eth1|grep driver
driver: 3c59x
# lspci|grep 3Com
02:0c.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 78)
# ip link set dev eth1 address 02:00:00:00:00:01
RTNETLINK answers: Device or resource busy
# ip link set dev eth1 down
# ip link set dev eth1 address 02:00:00:00:00:01
# ip link set dev eth1 up
# ip link show dev eth1
2: eth1: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
   link/ether 02:00:00:00:00:01 brd ff:ff:ff:ff:ff:ff

因此,關閉介面以更改 MAC 地址的建議在這裡仍然適用。

引用自:https://unix.stackexchange.com/questions/569751