[发明专利]一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法有效
申请号: | 201010279606.5 | 申请日: | 2010-09-13 |
公开(公告)号: | CN101917350A | 公开(公告)日: | 2010-12-15 |
发明(设计)人: | 姚文顶 | 申请(专利权)人: | 南京中兴特种软件有限责任公司 |
主分类号: | H04L12/56 | 分类号: | H04L12/56;H04L12/26 |
代理公司: | 南京天华专利代理有限责任公司 32218 | 代理人: | 夏平;瞿网兰 |
地址: | 211100 江苏省南京市江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 linux 基于 网卡 驱动 拷贝 以太网 报文 捕获 发送 实现 方法 | ||
1.一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,其特征是它包括以下步骤:
首先,在内核态报文驱动模块中建立捕包队列、报文释放队列、报文缓存队列及发送队列以实现对报文的管理,并创建相应的报文填充线程、报文释放线程及报文发送线程;
其次,在加载网卡驱动且打开相应的网卡设备时,立即向前述报文驱动模块进行网卡设备注册,获得相应的报文发送接口;
第三,在用户进程中将整个物理内存映射到用户空间,使得用户进程可以直接访问整个物理内存;
第四,当用户进程需要进行报文捕获或者发送时,通过Linux下的/proc文件项方式通知内核态报文驱动模块进行初始化工作,创建相应资源及记录用户进程的初始配置,初始化成功后,用户进程即可进程报文捕获及发送;
最后,采用物理地址在用户态和内核态之间进行数据交互,在用户态使用过程中将用户态的物理地址转换为虚拟地址,在内核态使用过程时,将内核态的物理地址其转换为内核虚拟地址,以实现零拷贝的以太网报文捕获及发送。
2.根据权利要求1所述的Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,其特征是所述的报文填充线程负责申请报文缓存,并将报文指针的物理地址放入报文缓存队列;所述的报文释放线程负责从报文释放队列中取出待释放报文指针,并相应缓存释放;所述的报文发送线程负责从报文发送队列中取出待释放报文指针,并将该报文发送出去;当网卡接收到报文,网卡驱动将报文上送到报文驱动模块,报文驱动模块将报文指针的物理地址放入相应的捕包队列中。
3.根据权利要求1所述的Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,其特征是所述的用户进程通过dmesg启动信息或者/proc/iomem文件获取到当前物理地址的最大值,并将当前进程空间使用的内存大小设置为无限制,同时根据获取到的最大物理地址使用mmap将整个物理内存映射到用户进程空间。
4.根据权利要求1所述的Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,其特征是所述的内核报文驱动模块注册初始化/proc文件项及其读写方法,然后由用户进程打开初始化/proc文件项,并向所述的初始化/proc文件项中写入初始配置项;内核态报文驱动模块获取到初始配置后,分配相应资源,设置捕包配置;内核初始化成功后,用户进程获取映射相应资源到用户空间,则用户进程可以通过相应资源捕获及发送报文。
5.根据权利要求1所述的Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,其特征是所述的报文捕获方法是:当报文到达网卡时,网卡驱动接收报文并将其上送到报文驱动模块,报文驱动模块将报文的物理地址放入捕包队列中,用户进程从捕包队列中取到报文的物理地址,转换为用户进程空间的虚拟地址,即可实现对报文数据的访问。
6.根据权利要求1所述的Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,其特征是所述的报文发送方法是:当用户进程需要发送报文时,首先从报文缓存队列中取出一个报文缓存的物理地址,转换为用户进程的虚拟地址,填充要发送的报文内容,然后将该报文物理地址放入相应发送队列,内核报文驱动模块从发送队列中取出待发送报文的物理地址,将其转换为内核态虚拟地址,调用网卡设备的发送接口,即可将该报文发送出去。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京中兴特种软件有限责任公司,未经南京中兴特种软件有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010279606.5/1.html,转载请声明来源钻瓜专利网。
- 上一篇:肠道病毒及其应用
- 下一篇:一种谷氨酰胺转胺酶编码基因阻断吸水链霉菌及其应用