內(nèi)核版本:2.6.34;在支持802.1主機上,報文的一般格式:
現(xiàn)在需要支持一種新的協(xié)議[二層] – BRCM協(xié)議,與IP等協(xié)議不同,它位于2層,擁有6字節(jié)的頭部和4字節(jié)的尾部,添加的層次決定了比起添加其它協(xié)議要復(fù)雜一些,新的報文格式如下,而我們的目的就是要網(wǎng)絡(luò)協(xié)議棧能正常處理這樣的報文:
實際上BRCM是一種交換機的內(nèi)部協(xié)議,用處是讓交換機管理端口能通過BRCM獲取報文來自于交換機的哪個端口,或者指定報文從交換機哪個端口出去;當(dāng)然,這不是我們關(guān)心的內(nèi)容,我們只需要為它挑選一個協(xié)議號0x8744,其余內(nèi)容置0就可以了。因此,brcm頭部會填寫成 88 74 00 00 00 00,brcm尾部會填寫成 00 00。一個新協(xié)議的報文內(nèi)容用wireshark等捕包工具查看的形式如下:
[源/目的mac]02 03 04 05 06 07 10 11 12 13 14 15
[BRCM報頭]88 74 00 00 00 00
[Vlan報頭]81 00 00 01
[報文內(nèi)容]……..
先從設(shè)備的概念來看下添加BRCM協(xié)議后的層次圖:
eth1代表實際的B4401物理網(wǎng)卡;eth1.X/brcm0.x代表VLAN創(chuàng)建的虛擬網(wǎng)卡,后面的數(shù)字X是vlan號;brcm0代表BRCM創(chuàng)建的虛擬網(wǎng)卡,數(shù)字0表示測試用;從圖中可以看到,brcm協(xié)議的添加是通過添加brcmX虛擬網(wǎng)卡接口實現(xiàn)的。
如果BRCM協(xié)議添加正確,那么最終的結(jié)果應(yīng)該是:
在接收報文時,通過虛擬設(shè)備BRCM會脫去brcm的6字節(jié)的頭部與4字節(jié)尾部,當(dāng)然,協(xié)議做的遠(yuǎn)遠(yuǎn)不只這些,但這是核心。
在發(fā)送報文時,通過虛擬設(shè)備BRCM會添加6字節(jié)的頭部與4字節(jié)的尾部,當(dāng)然,協(xié)議做的遠(yuǎn)遠(yuǎn)不只這些,但這是核心。
要做的工作大致是以下幾項:
1. 確定brcm_dev的存儲數(shù)據(jù)結(jié)構(gòu)
2. 編寫struct ptype_base brcm_packet_type
3. 添加ioctl調(diào)用供用戶空間調(diào)用,至少包括brcm_dev的創(chuàng)建和刪除
4. 添加notifier機制、netlink機制、proc機制
5. 添加編譯用的Kconfig, Makefile等,并修改Menuconfig
數(shù)據(jù)結(jié)構(gòu)是核心,每一步也是一個網(wǎng)絡(luò)協(xié)議模塊的核心。下一篇開始brcm協(xié)議的添加實現(xiàn)