Linux系统上以太网卡快速捕包的方法技术方案

技术编号:3485055 阅读:369 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开一种Linux系统上使用以太网卡快速捕包的方法,该方法是将以太网卡DMA接收缓存区映射到用户区,通过减少数据包到达用户区以及用户程序的拷贝次数和每个网卡启动一个线程捕包来实现同时对多网卡进行捕包,还通过关闭中断主动查询接收,减少中断处理调度开销,定义重复使用的缓存及其管理,减少缓存申请和释放的开销并减少捕包线程、包处理线程之间访问缓存的冲突,实现对以太网数据包包括在其上传输的ip包的快速的捕获。

【技术实现步骤摘要】

【技术保护点】
Linux系统上以太网卡快速捕包的方法,其特征在于,是将以太网卡DMA接收缓存区映射到用户区,通过减少数据包到达用户区以及用户程序的拷贝次数和每个网卡启动一个线程捕包来实现同时对多网卡进行捕包,还通过关闭中断主动查询接收,减少中断处理调度开销,定义重复使用的缓存及其管理,减少缓存申请和释放的开销并减少捕包线程和包处理线程之间访问缓存的冲突,实现对以太网数据包包括在其上传输的ip包的快速的捕获,方法步骤如下:    (1)在以太网卡驱动中,在模块加载时注册一个混杂设备miscellaneous  device,记为misc_dev,定义该设备的open,release,mmap,ioctl操作函数,其中mmap函数将用于将指定网卡的环形接收描述符缓存区和数据包接收缓存区映射给用户区的程序,ioctl函数用于为用户区程序提供移动指定网卡的环形接收描述符缓存区接收尾指针以使网卡能够持续收包的功能,相应的,在模块卸载时要注销该混杂设备;    (2)在以太网卡驱动中,在模块加载时定义一个全局结构变量,记为g_map_dev,用于保存该系列的所有网卡设备的环形接收描述符个数及其缓存区虚拟地址、数据包接收缓存区的虚拟地址,在混杂设备misc_dev的mmap函数中使用该全局变量g_map_dev获取缓存区虚拟地址转换为物理地址并向用户区映射,相应的,在模块卸载时要释放该全局结构变量;    (3)在以太网卡驱动中,使用pci_alloc_consistent函数分配接收描述符缓存区和数据包接收缓存区,这种方式使缓存区同时从网卡和CPU两个方向访问;这两个缓存区对于网卡直接内存访问Direct  Memory  Access方式传输的,同时把缓存区的虚拟地址保存到步骤(2)中说明的全局结构变量g_map_dev中,相应的,释放缓存区的时候,停止网卡或重置网卡使用pci_free_consistent函数;    (4)在用户区,定义一系列链表结构的缓存区,以实现数据包缓存的重复使用和减少包处理线程之间取包时的锁冲突;    缓存区分为两种组别:包接收缓存组和包处理缓存组,对于有N个网卡设备捕包和M个包处理缓存组的配置,将定义((2+M)×N+(4×M))个缓存区,即N个接收缓存组和M个包处理缓存组,每个接收缓存组包含2+M个缓存区,每个包处理缓存组包含4个缓存区,其中的每个缓存区是以链表结构组织,每个链表元素为一个固定大小的...

【技术特征摘要】

【专利技术属性】
技术研发人员:黄景昌张会健吴庆民施培任
申请(专利权)人:浪潮电子信息产业股份有限公司
类型:发明
国别省市:88[中国|济南]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1