suricata中DPDK收发包源码分析1

《suricata中DPDK收发包线程模型和配置说明》中已经对收发包模型和和相关配置进行了说明,今天我们来分析一下DPDK收发包框架的源码。

跟其它方式收包一样,DPDK的收包也是增加了runmode-dpdk.c和source-dpdk.c两个文件:

1) runmode-dpdk.c在RunModeRegisterRunModes()函数中调用RunModeDpdkRegister()来注册DPDK的收包模式,大部分代码都是对DPDK的配置项读取和DPDK收包参数的配置。

2)source-dpdk.c在RegisterAllModules()函数中调用TmModuleReceiveDPDKRegister()和TmModuleDecodeDPDKRegister()来注册DPDK对应的收包和解码两个module,大部分代码是对这两个module提供的API函数的实现,包括收包前的初始化和收取报文,解码前的初始化和报文解码。

下面我们来看一下比较关键的部分代码,上面提到的DPDK注册收包模式和两个Module的函数调用栈如下,都是在main函数中初始化的时候注册的,另外还有从配置中读取DPDK配置相关的pcie地址。

初始化代码函数调用栈如下:


main
  -->SuricataMain
    -->InitGlobal
      -->RunModeRegisterRunModes
        -->RunModeDpdkRegister(注册了RunModeIdsDpdkWorkers和DPDKRunModeEnableIPS两个回调函数)
    -->ParseInterfacesList
      -->LiveBuildDeviceList
        -->LiveBuildDeviceListCustom
          -->LiveRegisterDeviceName(读取所有DPDK配置的pcie地址接口,放到pre_live_devices链表中)
    -->PostConfLoadedSetup
      -->LiveDeviceFinalize
        -->LiveRegisterDevice(遍历pre_live_devices链表,读取pcie地址到live_devices链表中,后续提供网口pcie相关的函数都是从live_devices链表获取,比如LiveGetDeviceCount)
      -->RegisterAllModules
        -->TmModuleReceiveDPDKRegister
        -->TmModuleDecodeDPDKRegister

​​​​RunModeDpdkRegister注册提供了RunModeIdsDpdkWorkers和DPDKRunModeEnableIPS两个回调函数,全局运行模式变量static RunModes runmodes[RUNMODE_USER_MAX]中的RunModeFunc和RunModeIsIPSEnabled函数指针分别指向这两个回调。这两个函数最终调用的函数栈如下:

main-->SuricataMain  -->PostConfLoadedSetup    -->RunModeEngineIsIPS      -->DPDKRunModeEnableIPS(确认当前是不是IPS模式,默认是IDS)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值