您的位置:首页 > 理论基础 > 计算机网络

Linux内核实践 - 如何添加网络协议[一]:目的

2011-07-23 10:44 351 查看

Linux内核实践 - 如何添加网络协议[一]:目的

分类:
内核协议栈 2011-07-23 10:44
4055人阅读 评论(4)
收藏
举报

网络协议linux内核数据结构makefilestruct
       
本文只是一个内核网络协议的实践的例子,先说明添加的目的,下篇开始具体的实现。

        内核版本: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协议的添加实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: