在網橋建立時(brctl addbr br_test),核心為其生成乙個隨機的mac位址,並保證此位址的多播位為零(首位元組第乙個bit位:addr[0] &= 0xfe),並且設定上首位元組的第二個bit位,表明為本地生成的mac位址(addr[0] |= 0x02)。
static inline void eth_hw_addr_random(struct net_device *dev)
使用者通過ioctl修改網橋mac位址(ifconfig br_test hw eth 10:20:30:40:50:60),此位址不能為全零或全f位址,也不能為多播位址,否則修改不成功。最終通過函式br_stp_change_bridge_id修改網橋mac位址。修改之後,會將變數addr_assign_type賦值為net_addr_set,表明此時的mac位址為使用者設定。
int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa)
static int br_set_mac_address(struct net_device *dev, void *p)
}
在增加/減少橋介面(brctl addif br_test eth0)時,呼叫br_stp_recalculate_bridge_id函式,判斷是否需要更新網橋mac位址。前提條件是使用者未手動設定過網橋mac位址(addr_assign_type判斷)。接著遍歷網橋的子介面列表,找到子介面中最小的mac位址,網橋使用此位址。
int br_add_if(struct net_bridge *br, struct net_device *dev)
bool br_stp_recalculate_bridge_id(struct net_bridge *br)
br_stp_change_bridge_id(br, addr);
}
linux-4.14.4
簡述網橋的特點 網橋MAC位址的特點
在實際工作中碰到乙個問題 裝置有兩個網口,當把這兩個網口橋接到br0上時,之後如果設定了mac位址,就會發現資料報不能正常收發。如下是相關解釋 先說現象 brctl addbr br0 ifconfig br0 br0 mac is 00 00 00 00 00 00 brctl addif br0...
linux 切換mac 位址
很多軟體需要繫結mac位址 例如 opencountry 有時候為了特殊需要,我們需要修改網絡卡的mac位址。1 方法一 使用命令臨時修改 ifconfig eth0 down ifconfig eth0 hw ether xx xx xx xx xx xx ifconfig eth0 up 2 方...
linux獲取MAC位址程式設計
1 ifconfig a 其中 hwaddr欄位就是mac位址 2 cat sys class net eth0 address 檢視eth0的mac位址 3 cat proc net arp 檢視連線到本機的遠端ip的mac位址 4 程式中使用 siocgifhwaddr 的ioctl命令獲取ma...