/dpdk-sniffer

主要利用DPDK做DPI功能,此项目仅仅作为个人学习DPDK的实践项目。

Primary LanguageC

0x01 介绍

此项目主要完成数据包的嗅探。

0x02 目的

主要采取学和练的方式熟悉DPDK开发框架。

0x03 编译

(1)编译DPDK环境,利用脚本。
(2)进入源码目录make。
(3)运行:./dpdk_sniffer -l 0-1 -n 1 -- --rx "(1,0,0)" --flow "1"

0x04 版本计划

v1.0.0 主要单网卡、单队列、流管理。 每个版本会持续更新。
2017.11.27 使用struct rte_ring 将IO线程和流管理线程解耦。
2017.11.28 添加:添加流表;更新:添加定时器打印流表信息;
2017.11.29 添加:添加流超时周期,流管理的一部分
2017.11.30 修复:流超时断错误问题,定时器回调函数的格式

0x05 遇到的问题

(1)编译程序没问题,运行时报内存ops没初始化。
原因:constructor在main函数运行,有些对应的静态库没连接进来。因为我的makefile没有按照DPDK编程手册的建议编写,
所以导致某些静态库没连接进来。
(2)流表五元组做key存在将一条流分为了两个不同方向的流,因为五元组顺序不同。
(3)如果流表mbuf指针不释放空间,那边接收队列包缓存会满,导致只能处理部分包,这个问题也是考虑后面处理流表的效率的问题。
(4)定时器回调函数传入的参数总是发生变化,通过参考DPDK例子解决。