歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux內核實踐 - 如何添加網絡協議[一]:目的

Linux內核實踐 - 如何添加網絡協議[一]:目的

日期:2017/3/3 16:37:54   编辑:Linux內核

本文只是一個內核網絡協議的實踐的例子,先說明添加的目的,下篇開始具體的實現。

內核版本:2.6.34;在支持802.1主機上,報文的一般格式:

現在需要支持一種新的協議[二層] – BRCM協議,與IP等協議不同,它位於2層,擁有6字節的頭部和4字節的尾部 ,添加的層次決定了比起添加其它協議要復雜一些,新的報文格式如下,而我們的目的就是要網絡協議棧能正常處理這樣的報文 :

實際上BRCM是一種交換機的內部協議,用處是讓交換機管理端口能通過BRCM獲取報文來自於交換 機的哪個端口,或者指定報文從交換機哪個端口出去;當然,這不是我們關心的內容,我們只需要為它挑選一個協議號0x8744, 其余內容置0就可以了。因此,brcm頭部會填寫成 88 74 00 00 00 00,brcm尾部會填寫成 00 00。一個新協議的報文內容用 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

[報文內容]……..

先從設備的概 念來看下添加BRCM協議後的層次圖:

eth1代表實際的B4401物理網卡;eth1.X/brcm0.x代表 VLAN創建的虛擬網卡,後面的數字X是vlan號;brcm0代表BRCM創建的虛擬網卡,數字0表示測試用;從圖中可以看到,brcm協議 的添加是通過添加brcmX虛擬網卡接口實現的。

如果BRCM協議添加正確,那麼最終的結果 應該是:

在接收報文時,通過虛擬設備BRCM會脫去brcm的6字節的頭部與4字節尾部,當然,協 議做的遠遠不只這些,但這是核心。

在發送報文時,通過虛擬設備BRCM會添加6字節的頭部與4 字節的尾部,當然,協議做的遠遠不只這些,但這是核心。

要做的工作大致是以下幾項 :

1. 確定brcm_dev的存儲數據結構

2. 編寫struct ptype_base brcm_packet_type

3. 添加ioctl調用供用戶空間調用,至少包括brcm_dev的創建和刪除

4. 添加notifier機制、netlink機制、proc機制

5. 添加編譯用的Kconfig, Makefile等,並修改Menuconfig

數據結構是核 心,每一步也是一個網絡協議模塊的核心。下一篇開始brcm協議的添加實現。

Copyright © Linux教程網 All Rights Reserved