經常在網絡卡裡面看到廣播位址,賦值為0x8000,網上幾乎沒人去解釋這個東西。
例如dm9000.
/* broadcast address */
hash_table[3] = 0x8000;
u16 hash_table[4];這個是16位的表,我們知道mac廣播位址是ff:ff:ff:ff:ff:ff
那麼為什麼在這是個0x8000。
這要結合一下硬體,dm9000有個叫multicast address register的暫存器
那個hash_table[4]會寫入這裡,這是為了組播用的。為什麼組播裡面要搞乙個廣播。
首先,組播是第乙個位元組的最低位為1的所有位址,例如01-12-0f-00-00-02。廣播位址是全1的48位位址,也屬於組播位址。但是廣播又是組播中的特例,就像是正方形屬於長方形,但是正方形有長方形沒有的特點
順便說一下這裡指的是mac組播和廣播,不是ip位址。
其次,當網絡卡設為pass all multicast,這個在dm9000的rx control register中,網絡卡會通過校驗後得到的值與上面的mar暫存器裡的值比較,相同的才會接收資料(這些都是硬體做的)。所以要有廣播來支援arp。
上面說了那個0x8000其實是crc後的值,那麼它對應的肯定是ff:ff:ff:ff:ff:ff。下面簡單模組可以執行看一下:
#include #include static char macaddr[6] = ;
static __exit void crc_cleanup(void)
static __init int crc_init(void)
module_init(crc_init);
module_exit(crc_cleanup);
module_license("gpl");
結果就是:
對於crc32_le(),有興趣自己看看吧!
驅動 DM9000網絡卡驅動分析
preface 核心原始碼版本 linux 2.6.18 網絡卡驅動 linux核心網路分層結構 dm9000晶元 dm9000是一款高度整合低功耗快速乙太網處理器,該晶元整合了mac和phy。dm9000可以和cpu直接連線,支援8位 16位和32位資料匯流排寬度。該晶元支援10m和100m自適應...
eth0網絡卡配置詳解
配置 說明 device eth0 網絡卡裝置名,eth0表示第一張網絡卡 bootproto none 是否自動獲取ip none static dhcp 當值為dhcp時,只需配置上述例子中的那幾項就可以聯網 hwaddr 00 0c 29 11 30 39 mac位址 nm controlle...
eth0網絡卡配置詳解
配置 說明 device eth0 網絡卡裝置名,eth0表示第一張網絡卡 bootproto none 是否自動獲取ip none static dhcp 當值為dhcp時,只需配置上述例子中的那幾項就可以聯網 hwaddr 00 0c 29 11 30 39 mac位址 nm controlle...