librte_pdump中文文档

librte_pdump

细节描述

该库用来在dpdk上进行包捕获

函数文档

rte_pdump_init()

int rte_pdump_init(void )

初始化包捕捉处理,注册IPC操作与主进程(目标进程)进行通信。

  • IPC:

进程间通信。进程间通信是指两个进程的数据之间产生交互。

rte_pdump_uninit()

int rte_pdump_uninit(void)

注销pdmup

rte_pdump_enable()

int rte_pdump_enable	(	uint16_t 	port,
uint16_t 	queue,
uint32_t 	flags,
struct rte_ring * 	ring,
struct rte_mempool * 	mp,
void * 	filter 
)

对给定的网卡号和队列使能。

image-20220427220654453

  • port:网卡号
  • queue:网卡队列
  • flags:确定RX/TX/RXTX方向
  • ring:被捕数据包的环形缓冲区将其排队等待用户
  • mp:原始数据包的将被镜像或复制到内存池
  • fiflter:包过滤位置标志符

成功返回0,失败返回-1。rte_errno被相应的设置

rte_pdump_disable()

int rte_pdump_disable	(	uint16_t 	port,
uint16_t 	queue,
uint32_t 	flags 
)

失能

rte_pdump_enable_by_deviceid()

int rte_pdump_enable_by_deviceid	(	char * 	device_id,
uint16_t 	queue,
uint32_t 	flags,
struct rte_ring * 	ring,
struct rte_mempool * 	mp,
void * 	filter 
)

在给定的设备id(即网卡名称或pci地址)和队列上使能数据包捕获

rte_pdump_disable_by_deviceid()

int rte_pdump_disable_by_deviceid	(	char * 	device_id,
uint16_t 	queue,
uint32_t 	flags 
)	

失能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用dpdk20.11版中pdump功能(包含filter)的详细实例。 1. 首先,在DPDK应用程序中包含pdump头文件: ```c #include <rte_pdump.h> ``` 2. 初始化pdump库,这应该在rte_eal_init()函数之后调用: ```c int ret; ret = rte_pdump_init(); if (ret < 0) { // 初始化失败,处理错误 } ``` 3. 创建pdump文件,调用rte_pdump_open()函数。在创建pdump参数时,不需要指定BPF过滤器条件: ```c const char *filename = "pdump.pcap"; uint16_t portid = 0; // 捕获端口的ID uint32_t snaplen = 65535; // 每个数据包的最大长度 struct rte_pdump_params pdump_params = { .file_name = filename, .port_id = portid, .snaplen = snaplen, }; struct rte_pdump *pdump = rte_pdump_open(&pdump_params); if (pdump == NULL) { // 创建pdump文件失败,处理错误 } ``` 4. 启用pdump功能,调用rte_pdump_enable()函数,并指定BPF过滤器条件: ```c const char *filter = "ip and host 192.168.1.2"; ret = rte_pdump_enable(pdump, filter); if (ret < 0) { // 启用pdump失败,处理错误 } ``` 这里的filter参数指定了一个BPF过滤器条件,将只捕获目的IP地址为192.168.1.2的数据包。 5. 在需要捕获数据包的代码中,调用rte_eth_rx_burst()函数来获取数据包: ```c struct rte_mbuf *bufs[BURST_SIZE]; const uint16_t nb_rx = rte_eth_rx_burst(portid, queueid, bufs, BURST_SIZE); if (nb_rx > 0) { // 成功接收数据包,处理数据包 } ``` 6. 在代码中处理完数据包后,将数据包写入pdump文件,调用rte_pdump_write()函数: ```c for (int i = 0; i < nb_rx; i++) { rte_pdump_write(pdump, bufs[i], NULL); } ``` 7. 在退出应用程序之前,关闭pdump文件,调用rte_pdump_close()函数: ```c rte_pdump_close(pdump); ``` 这就是使用dpdk20.11版中pdump功能(包含filter)的详细实例。在rte_pdump_enable()函数中指定BPF过滤器条件,可以避免在创建pdump文件时指定BPF过滤器条件的麻烦。在rte_pdump_write()函数中将数据包写入pdump文件之前,BPF过滤器条件将会被应用到每个数据包上,只有符合过滤条件的数据包才会被写入pdump文件中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值