本文只是一個(gè)內(nèi)核網(wǎng)絡(luò)協(xié)議的實(shí)踐的例子,先說(shuō)明添加的目的,下篇開始具體的實(shí)現(xiàn)。 內(nèi)核版本:2.6.34;在支持802.1主機(jī)上,報(bào)文的一般格式: 現(xiàn)在需要支持一種新的協(xié)議[二層] – BRCM協(xié)議,與IP等協(xié)議不同,它位于2層,擁有6字節(jié)的頭部和4字節(jié)的尾部,添加的層次決定了比起添加其它協(xié)議要復(fù)雜一些,新的報(bào)文格式如下,而我們的目的就是要網(wǎng)絡(luò)協(xié)議棧能正常處理這樣的報(bào)文:
實(shí)際上BRCM是一種交換機(jī)的內(nèi)部協(xié)議,用處是讓交換機(jī)管理端口能通過(guò)BRCM獲取報(bào)文來(lái)自于交換機(jī)的哪個(gè)端口,或者指定報(bào)文從交換機(jī)哪個(gè)端口出去;當(dāng)
然,這不是我們關(guān)心的內(nèi)容,我們只需要為它挑選一個(gè)協(xié)議號(hào)0x8744,其余內(nèi)容置0就可以了。因此,brcm頭部會(huì)填寫成 88 74 00 00
00 00,brcm尾部會(huì)填寫成 00 00。一個(gè)新協(xié)議的報(bào)文內(nèi)容用wireshark等捕包工具查看的形式如下: 先從設(shè)備的概念來(lái)看下添加BRCM協(xié)議后的層次圖: eth1代表實(shí)際的B4401物理網(wǎng)卡;eth1.X/brcm0.x代表VLAN創(chuàng)建的虛擬網(wǎng)卡,后面的數(shù)字X是vlan號(hào);brcm0代表BRCM創(chuàng) 建的虛擬網(wǎng)卡,數(shù)字0表示測(cè)試用;從圖中可以看到,brcm協(xié)議的添加是通過(guò)添加brcmX虛擬網(wǎng)卡接口實(shí)現(xiàn)的。 如果BRCM協(xié)議添加正確,那么最終的結(jié)果應(yīng)該是: 在接收?qǐng)?bào)文時(shí),通過(guò)虛擬設(shè)備BRCM會(huì)脫去brcm的6字節(jié)的頭部與4字節(jié)尾部,當(dāng)然,協(xié)議做的遠(yuǎn)遠(yuǎn)不只這些,但這是核心。 在發(fā)送報(bào)文時(shí),通過(guò)虛擬設(shè)備BRCM會(huì)添加6字節(jié)的頭部與4字節(jié)的尾部,當(dāng)然,協(xié)議做的遠(yuǎn)遠(yuǎn)不只這些,但這是核心。 要做的工作大致是以下幾項(xiàng): |
|
來(lái)自: 杰的個(gè)人圖書館 > 《kernel》