原文地址:http://blog.csdn.net/skyflying2012/article/details/40322563
之前一段時間在做網卡驅動的工作,現在產品量產,利用ifconfig eth hw ether在配置mac地址時發現一個問題,
隨機配置一個mac地址,發現有的會報出Cannot assign requested address。
錯誤碼是EADDRNOTAVAIL。
driver中實現了專門的set_mac_addr函數,察看該函數,發現原來會檢驗該mac地址的有效性。
檢查不是組播地址也不是全0地址。
組播地址就是第一個字節最低位為1,問題就是在這里。
發現第一個字節最低位為1時該函數就會返回0,driver中的set_mac_addr就會返回EADDRNOTAVAIL錯誤碼。
嚴格來說mac地址對於每塊網卡是固定的,每塊網卡被生產出來后,都會有一個全球唯一的編號來標識自己,不會重復,
這個編號就是MAC地址,也就是網卡的物理地址。MAC地址是由48位的二進制數組成,即6個字節。在通信中是用16進制表示的。
前24位是由生產廠家向IEEE標准組織申請的廠家代碼,是固定的,但是第一個字節的最低位一定是0,因為網卡的物理地址,一定是單播地址,
在IPv4的環境中,區分單播和組播地址就是校檢最低位的二進制數字,0代表單播地址,1代表組播地址。
也就是說第二個數字一定是0、2、4、6、8、A、C、E其中的一個。
所以mac地址雖然可以修改,但是不要亂改,要按照廠商規定來修改,以免重復。