suricata中DPDK收发包源码分析2

suricata中DPDK收发包线程模型和配置说明 suricata中DPDK的收发包线程模型以及相关的配置。 阅读详情

《suricata中DPDK收发包源码分析1》中分析了整体的DPDK收发包框架代码,今天我们继续来深入了解一下一些细节方面的问题。

目录

Q1:收发包线程模式在代码中是怎样确定的?

Q2: DPDK库的初始化rte_eal_init在哪里调用的?

Q3: 对网卡进行DPDK相关接口的配置操作的代码在哪里?

Q4: DPDK mbfu和suricata Packet是怎么转换的?

Q5: 网卡的RSS对哈希是在哪里配置的?


Q1:收发包线程模式在代码中是怎样确定的?

前面的文章《suricata中DPDK收发包线程模型和配置说明》中说的收包线程模型如下,那么这个收包模型在代码中是怎么确定的呢?

前面讲的DPDK的网口配置文件时,每个网口会指定收包线程数,我们指定的是2,即每个网口有两个收包线程,在RunModeSetLiveCaptureWorkers函数中会获取网卡总数,遍历所有网卡,然后遍历所有网卡配置的线程个数,所以总共启动的收包线程数就是网卡数*每个网卡配置的收包线程数,那怎么确定第一个收包线程只收取第一个网卡的0号队列的报文,第二个收包线程只收取第一个网卡的1号队列的报文,以及第三个线程,第四个线程以此类推呢?

前面讲到,DPDK调用rte_eth_rx_burst进行循环收包的函数是ReceiveDPDKLoop,rte_eth_rx_burst函数的前两个参数是port_id和queue_id,所以要控制每个线程收哪个网卡哪个队列的报文控制这两个参数就行了,这里的port_id和queue_id来自于DPDK的线程变量DPDKThreadVars,每个收包线程都有一个这样的变量:

typedef struct DPDKThreadVars_ {

/* counters */

uint64_t pkts;

ThreadVars *tv;

TmSlot *slot;

LiveDevice *livedev;

ChecksumValidationMode checksum_mode;

/* references to packet and drop counters */

uint16_t capture_dpdk_packets;

uint16_t capture_dpdk_rx_errs;

uint16_t capture_dpdk_imissed;

uint16_t capture_dpdk_rx_no_mbufs;

uint16_t capture_dpdk_ierrors;

uint16_t capture_dpdk_tx_errs;

unsigned int flags;

int threads;

/* for IPS */

DpdkCopyModeEnum copy_mode;

uint16_t out_port_id; //发送网口id

/* Entry in the peers_list */

uint64_t bytes;

uint64_t accepted;

uint64_t dropped;

uint16_t port_id; //收包网口id

uint16_t queue_id; //网口队列id

struct rte_mempool *pkt_mempool;

struct rte_mbuf *received_mbufs[BURST_SIZE];

} DPDKThreadVars;

DPDKThreadVars变量的值来自于slot->slot_data,slot->slot_data是TmThreadsSlotPktAcqLoop函数中:

for (slot = s; slot != NULL; slot = slot->slot_next) {

if (slot->SlotThreadInit != NULL) {

void *slot_data = NULL;
基于DPDK抓包的Suricata安装部署 基于DPDK抓包的Suricata版本只更新到4.1.4,因此对DPDK版本有要求,经过测试推荐使用 DPDK-19.11.14。由于服务器开关机会导致DPDK绑定的网卡会被默认解绑,为简化重新机械的绑定工作,通过shell脚本实现自动化DPDK绑定网卡。DPDK官网下载地址:http://fast.dpdk.org/rel/dpdk-19.11.14.tar.gz。7 [root@ids-dpdk ~]# ls /usr/src/kernels/ #查看有没有相应的内核开发包。 阅读详情

相关推荐

基于DPDK收包的suricata的安装和运行

先用lshw -C network -businfo命令找到网卡的pcie地址,然后在/usr/local/etc/suricata/suricata.yaml文件中配置suricata DPDK收包,主要修改interface和copy-iface配置。suricata是一个基于规则的入侵检测和防御引擎,功能强大,但性能可能 差强人意,不过目前最新的7版本已经支持DPDK收包了,DPDK是Intel提供的高性能网络收发包开源库,可想而知,suricata支持DPDK收包会带来性能的极大提升。

每天分享一个编程小知识 2608

suricata中DPDK收发包源码分析1

2)source-dpdk.c在RegisterAllModules()函数中调用TmModuleReceiveDPDKRegister()和TmModuleDecodeDPDKRegister()来注册DPDK对应的收包和解码两个module,大部分代码是对这两个module提供的API函数的实现,包括收包前的初始化和收取报文,解码前的初始化和报文解码。好了,关于suricata中DPDK收发包的初始化以及框架代码的分析就到这里了。

每天分享一个编程小知识 853

suricata的Decode协议解码流程源码分析

一般报文的解码流程比较简单,先确定报文的起始位置和总长度,这两个值在ReceiveDPDKLoop中PacketSetData函数,将DPDK mbuf的报文起始地址和报文总长度赋值给了suricata报文Pakcet结构体的ext_pkt和pktlen。DPDK解码流程的函数入口是DecodeDPDK,解码流程按照以太网层、网络层、传输层以及负载一层层找到报文中指定的位置,并且记录相关字段,最后在FlowSetupPacket函数中根据建流的需要打上相应的标记以及计算出流表的哈希值。

每天分享一个编程小知识 1173

【网络入侵检测】基于Suricata源码分析运行模式(Runmode)

在 Suricata 中抽象出线程、线程模块和队列三个概念:线程类似进程,可多线程并行执行操作;监听、解码、检测等网络操作被抽象为模块,由线程执行,而不同的线程可以执行一个或多个不同的模块;队列实现线程间数据包流转,三者的不同组合构成 Suricata 的运行模式。

不断学习,不断进步。 1163

suricata中的线程管理分析

在runmodes.c中定义了如下的线程命名,从中大概可以看出suricata存在哪些线程,由于我们重点关注的是DPDK的workers模式收包,所以无关的线程,我们暂时不关注(已在下面的线程名后面标识出来)一文中,我们讲到了suricata中如何自定义命令,现在我们来实践一下,加入threads-list和slots-list这两个自定义命令,分别查看suricata的线程列表以及指定线程的slots。有问题或者需要自定义命令源码的朋友,可以进网络技术开发交流群提问(先加我wx,备注加群)。

每天分享一个编程小知识 501

【网络入侵检测】基于源码分析Suricata的解码模块

在 Suricata 中,数据包解码功能由一套模块化架构支撑。无论其运行于 PCAP、NFQ、DPDK 或其他模式,尽管各运行模式分别对应 DecodePcap、DecodeNFQ、DecodeDPDK 等特定解码函数,但在执行流程中,最终均会收敛至 DecodeLinkLayer、DecodeIPV4 或 DecodeIPV6 等核心解码函数,完成链路层与网络层数据包的解析处理。本文主要解码 Suricata 中解码模块是如何从链路层到传输层解析各层包头的。

不断学习,不断进步。 994

DPDK基础组件一(mbuf、ring、pktmbuf_pool)

1.dpdk mempool 针对每个 lcore 配置 cache,对于单独使用 pthread_create 创建的线程,由于 lcore_id 为 -1,不能获取到 mempool cache,在这些线程中申请、释放元素到 mempool 中不会经过 cache每一个 lcore 上 mempool cache 的使用没有任何互斥保护,多个线程使用同一个 lcore 的情况下对 mempool cache 的访问会存在不一致性,这种场景下需要关闭 mempool cache 功能.

weixin_43155199的博客 2474

DPDK的l2fwd实例分析

l2fwd应用程序为RX_PORT上接收的每个数据包执行二层转发。 目标端口是启用的端口掩码的相邻端口,即,如果启用前四个端口(端口掩码0xf,每个端口用一个比特位表示,启动4个就是4个比特位置1),端口1和2相互转发,端口3和4相互转发。 此外,如果启用了MAC地址更新,则MAC地址按照如下方式更新: 数据包的源mac会变成发送端口的mac地址 数据包的目的mac会变成02:00:00:00...

weixin_39286923的博客 6657

DPDK用户态kni实现

以DPDK的kni example分析用户态kni实现: 1、DPDK初始化; 2、申请mbuf pool内存池:pktmbuf_pool; 3、init_kni 若网卡的kni_port_params_array的nb_lcore_k未设置,设置nb_lcore_k为1; rte_kni_init:打开kni设备文件,获取kni设备文件fd:kni_fd; 4、查找ports_mas...

qq_29044159的博客 1025

保姆级教程:用dnSpy调试Unity游戏,从找DLL到打断点全流程(附调试版mono.dll下载)

本文详细介绍了使用dnSpy调试Unity游戏的全流程,包括环境准备、关键程序集定位、mono.dll版本匹配与替换、调试环境配置及实战技巧。通过本教程,开发者可以高效进行Unity游戏逆向分析,适用于学习设计模式或安全审计等场景。

weixin_30236595的博客 577

GT-suite v2016的下载和安装

1 写在前面 GT-suite 是一款用来做内燃机仿真的软件。在安装过程中遇到很多问题,网上的安装教程也大都抄来抄去,试着安装了几遍都没有成功。最终在贴吧一个老哥的帖子里找到了解决办法,但是老哥的帖子也不是很详细,所以做了这个详细版本的教程。 GT-suite v2016安装包: 链接:https://pan.baidu.com/s/1JZPgJ8_-J-L8rV84-eHedQ 提取码:uj...

kisssshot的博客 3万+

第7篇-SAP MM模块-JIT应用实战解析,从计划协议到JIT供应的关键配置与流程

本文深入解析SAP MM模块中的JIT(Just In Time)供应模式,从计划协议到JIT供应的关键配置与流程。通过动态计划行管理、需求聚合与分解等核心功能,实现精确数量、时间和地点的物料供应。文章详细介绍了主数据准备、计划协议配置、MRP参数精调及EDI集成方案,并提供了实施中的典型问题与解决方案,助力企业优化供应链管理。

weixin_30363509的博客 948

el-table通过上下左右键移动光标

在Element Plus的el-table中包含el-input和el-select组件,要实现上下左右键控制光标位置,需要通过focus和blur跟踪判断当前是哪个el-input或el-select有焦点,当按键按下时,通过监听,计算下一个获取焦点元素的索引,通过focus方法将焦点切换至改元素。

秋思的博客 1350

打穿内网之Vulntarget-a靶场实战记录

内容包括:通达OA未授权上传+文件包含RCE、Redis未授权写马、ms17-010永恒之蓝、代理转发内网跳板、CVE-2020-1472 域控杀器Zerologon、wmiexec/smbexec横向移动、cobalt strike与msf的shell传递

tpaer的博客 3033

5分钟搞定Conflux钱包注册:Fluent钱包从安装到转账全流程指南

本文提供Conflux公链上Fluent钱包的完整注册和使用指南,涵盖从安装、助记词备份到CFX转账的全流程。特别强调安全操作要点,包括助记词保管和网络选择,帮助用户5分钟内快速掌握这款国产公链钱包的核心功能,确保数字资产安全。

weixin_29181861的博客 244

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

SMFA(自调制特征聚合模块): SMFA模块用于协同建模局部和非局部信息,它分为两个分支:一个是EASA(Efficient Approximation of Self-Attention,简化的自注意力分支),用于捕获非局部信息;另一个是LDE(Local Detail Estimation,局部细节估计分支),用于捕获局部细节。EASA通过对输入特征进行下采样,然后利用全局特征的方差进行调制,再与原始特征进行聚合,提取非局部结构信息。LDE分支则通过卷积操作提取输入特征中的高频局部信息。

qq_64693987的博客 2208

Claude Code(7):从零创建你的第一个 Skill

在前面的文章,我们介绍了 Skills 的基本概念,这篇我们深入实战,从零开始创建你的第一个 Skill,并逐步解锁所有配置项,让 Claude Code 真正熟悉你的测试规范和习惯。

blues_C的博客 649

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: suricata中DPDK收发包源码分析1
下一篇: DPDK常用工具的使用方法
编程十万问
博客等级 码龄7年 2432粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值