加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2016-09-28 18:36:49 所属栏目:Linux 来源:站长网
导读:本文只是一个内核网络协议的实践的例子,先说明添加的目的,下篇开始具体的实现。 内核版本:2.6.34;在支持802.1主机上,报文的一般格式: 现在需要支持一种新的协议[二层] BRCM协议,与IP等协议不同,它位于2层,拥有6字节的头部和4字节的尾部 ,添加的

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

内核版本:2.6.34;在支持802.1主机上,报文的一般格式:

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

现在需要支持一种新的协议[二层] – BRCM协议,与IP等协议不同,它位于2层,拥有6字节的头部和4字节的尾部 ,添加的层次决定了比起添加其它协议要复杂一些,新的报文格式如下,而我们的目的就是要网络协议栈能正常处理这样的报文 :

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

实际上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协议后的层次图:

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

eth1代表实际的B4401物理网卡;eth1.X/brcm0.x代表 VLAN创建的虚拟网卡,后面的数字X是vlan号;brcm0代表BRCM创建的虚拟网卡,数字0表示测试用;从图中可以看到,brcm协议 的添加是通过添加brcmX虚拟网卡接口实现的。

如果BRCM协议添加正确,那么最终的结果 应该是:

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

在接收报文时,通过虚拟设备BRCM会脱去brcm的6字节的头部与4字节尾部,当然,协 议做的远远不只这些,但这是核心。

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

在发送报文时,通过虚拟设备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协议的添加实现。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读