将DPDK移植到snort上的DAQ

本文介绍了如何将DAQ与Snort结合,特别是在Snort的多线程环境中,解决DPDK单线程初始化限制的问题。通过创建线程ID到网卡的映射表,使得每个线程能独立操作特定的DPDK网卡,从而实现多线程并发抓包和分析。
摘要由CSDN通过智能技术生成

DAQ 与Snort

在snort-daq中,daq的控制流程是这样的。
snort_daq
如上所述,Snort在初始化的时候载入了daq。这个时候snort的所调用的api是daq_load_modules。也就是说,这个时候在主线程没有启动网卡,初始化实例的操作。
在初始化整个snort之后(载入配置,载入daq及其他各个模块等等)。snort就进入了分析的阶段了。这个阶段的主角是
pig,或者说更本质的,是pig下的analyzer
Snort下面开n个pig线程。pig线程下面调用analyzer来进行包解析。
包解析的过程中是在pig线程中多线程并行进行的。每一个analyzer下面都初始化一个daq instance并调用acquire进行抓包并分析。每一个daq instance下面都有一个或多个网卡来获取数据。因为目的主要是介绍daq,所以怎么解析就不提了。
pig_daq
从上图和上面的介绍就可以看得出来,一个snort下面有多个daq instance并行运行。每一个daq instance都会进行初始化操作,占用系统资源,获取网卡&#x

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
移植 DPDK 的 multi-process 代码到 VPP 环境中,需要考虑以下几个步骤: 1. 将 DPDK 的 multi-process 应用程序中涉及到的 DPDK API 替换为 VPP 的 API。例如,将 DPDK 的 rte_eal_init() 函数替换为 VPP 的 vlib_init() 函数,将 DPDK 的 rte_eth_dev_configure() 函数替换为 VPP 的 vnet_hw_interface_set_rx_mode() 函数。 2. 将 DPDK 的 multi-process 应用程序中的 IPC 机制替换为 VPP 的 IPC 机制。DPDK 的 multi-process 应用程序通常使用共享内存和信号量进行进程间通信,而 VPP 使用的是消息队列和共享内存。因此,需要将 DPDK 的共享内存和信号量机制替换为 VPP 的消息队列和共享内存机制。 3. 修改应用程序的启动脚本。DPDK 的 multi-process 应用程序需要通过启动脚本指定各个进程的参数,而 VPP 的应用程序则需要通过启动脚本指定 VPP 的配置文件和插件。因此,需要修改启动脚本,以符合 VPP 的要求。 4. 修改应用程序的代码逻辑。DPDK 的 multi-process 应用程序通常使用 DPDK 的 rte_eal_mp_remote_launch() 函数启动各个子进程,而 VPP 的应用程序则需要使用 VPP 的 vlib_worker_thread_function() 函数启动各个工作线程。因此,需要修改应用程序的代码逻辑,以符合 VPP 的要求。 总之,将 DPDK 的 multi-process 应用程序移植到 VPP 环境中,需要对应用程序的代码进行较大的修改,并需要熟悉 DPDK 和 VPP 的 API 和 IPC 机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值