Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1911805
  • 博文数量: 376
  • 博客积分: 2147
  • 博客等级: 大尉
  • 技术积分: 3642
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-06 10:47
文章分类

全部博文(376)

文章存档

2019年(3)

2017年(28)

2016年(15)

2015年(17)

2014年(182)

2013年(16)

2012年(115)

我的朋友

分类: 嵌入式

2014-01-06 16:38:16

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

        内核版本: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协议的添加实现。

阅读(1001) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~