dpdk-pdump 编译运行_client request for pdump enable/disable failed-程序员宅基地

技术标签: dpdk  dpdk-pdump 编译运行  

dpdk-pdump 是什么

dpdk-pdump 是 dpdk 提供的一个工具。它可以可以作为 secondary 程序运行,能够捕获 dpdk 的端口的数据包。

编译 dpdk-pdump

dpdk-pdump 工具的源码位于 dpdk 源码根目录下的 ./app/pdump 目录中,不需要像 examples 中的 demo 一样单独编译,它会在编译 dpdk 的同时也被编译,我们可以在编译生成的 app 目录中找到这个程序。

在我的虚拟机中,编译 dpdk 后,它的位置如下:

/home/longyu/dpdk-stable-17.05.2/x86_64-native-linuxapp-gcc/app/dpdk-pdump

使用 dpdk-pdump

dpdk-pdump 的用法如下:

usage: ./dpdk-pdump [EAL options] – --pdump ‘(port= | device_id=),(queue=<queue_id>),(rx-dev= | tx-dev=,[ring-size=default:16384],[mbuf-size=default:2176],[total-num-mbufs=default:65535]’ [–server-socket-path=default:/var/run/.dpdk/ (or) ~/.dpdk/] [–client-socket-path=default:/var/run/.dpdk/ (or) ~/.dpdk/]

dpdk-pdump 需要依赖一个 dpdk primary 进程,我就以 l2fwd 命令作为 dpdk primary 进程。

有了 dpdk primary 进程之后,根据我的环境,我使用如下命令行启动 dpdk-pdump

	sudo ./dpdk-pdump -n 4 -- --pdump 'port=0,queue=*,rx-dev=./rx-pcap'

no driver for pcap 的问题

我第一次执行上面的命令时程序异常终止,错误信息如下:

EAL: no driver found for eth_pcap_rx_0
EAL: Driver, cannot attach the device

通过搜索,我发现上面的错误是因为在编译 dpdk 时没有启用 PCAP 相关的功能所致,参考链接如下:

dpdk-pdump-no-driver-found-for-net-pcap

根据网页中的回答我对 .config 文件做了如下修改以使能 PCAP 的相关功能:

longyu@longyu-pc:~/dpdk-stable-17.05.2/x86_64-native-linuxapp-gcc$ grep 'PCAP' .config
# Compile software PMD backed by PCAP files
CONFIG_RTE_LIBRTE_PMD_PCAP=y
CONFIG_RTE_PORT_PCAP=y

这之后重新编译后继续测试,这个问题得到了解决,可又遇到了一个新的问题。

无法与 primary server 端通信的问题

解决了 pcap driver 的问题后,我重新执行 dpdk-pdump 时新的报错信息如下:

PDUMP: failed to send to server:No such file or directory,
pdump_create_client_socket:702 PDUMP: client request for pdump
enable/disable failed PDUMP: failed to send to server:No such file or
directory, pdump_create_client_socket:702 PDUMP: client request for
pdump enable/disable failed

通过阅读官方网页中的说明,我发现了问题所在。官方的说明中提到 dpdk-pdump 工具只能与初始化了 packet capture framework 的主程序通信,而 packet capture framework 的初始化需要修改程序的源码。

在 dpdk 提供的工具中,testpmd 工具的源码中添加了 packet capture framework 的初始化代码,我查看相关代码,找到了如下源码行:

	diag = rte_eal_init(argc, argv);
	    if (diag < 0)
	        rte_panic("Cannot init EAL\n");
	
	#ifdef RTE_LIBRTE_PDUMP
	    /* initialize packet capture framework */
	    rte_pdump_init(NULL);
	#endif

上面的代码会在 RTE_LIBRTE_PDUMP 宏定义时执行 rte_pdump_init 函数来进行必要的初始化,RTE_LIBRTE_PDUMP 功能在 .config 中进行配置,默认为开启。

.config 中与 RTE_LIBRTE_PDUMP 功能相关的配置如下:

	# Compile architecture we compile for. pdump library
	CONFIG_RTE_LIBRTE_PDUMP=y

当使用能了这个参数后,编译目录下的头文件 rte_config.h 中会定义 RTE_LIBRTE_PDUMP 宏,相关的代码如下:

	#undef RTE_LIBRTE_PDUMP
	#define RTE_LIBRTE_PDUMP 1

我按照上面的描述修改了 dpdk-pdump 程序的源码后,终于能够正常执行了!

查看 dump 出的数据包文件

dpdk-pdump 中已经对 dump 出的原始数据包进行了转化,我们可以直接使用 tcpdump-r 选项来查看生成的文件。

我指定 dpdk-pdump dump 端口接收到的包,指定存储文件为 ./rx-pcap。我只需要执行下面的命令就可以看到接收到的数据包的详细信息。

 	sudo tcpdump -r ./rx-pcap

总结

dpdk 提供的程序在使用时可能会遇到一些问题,解决这些问题的一般步骤如下:

  1. 查看依赖的功能是否开启(修改 .config 文件)
  2. 修改必要的源代码以执行必要的初始化工作
  3. 重新编译后再次执行
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Longyu_wlz/article/details/103135807

智能推荐

uniapp视频播放器(h5+app)

这是关于一篇在uniapp使用video视频播放器,支持自定义播放器样式,支持手势操作,选集、倍数和清晰度切换,支持SRT字幕格式。

uCosii从任务的建立到运行_ucosii用户任务中都有参数初始化,先执行哪个-程序员宅基地

文章浏览阅读823次。μC/OS-Ⅱ从任务的建立到运行提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、任务建立到运行整体流程二、分步功能实现1.μC/OS-Ⅱ初始化2.读入数据总结前言最近在学习ucosii实时操作系统,记录下学习过程,以待日后查阅.tips:本文所用ucosii版本为V2.86,硬件平台为STM32.一、任务建立到运行整体流程μC/OS-Ⅱ任务从建立到运行的整体流程如下所述:1. μC/OS-Ⅱ初始化: OSInit();2. 创建任务: Create_T_ucosii用户任务中都有参数初始化,先执行哪个

【燃料电池】燃料电池并网以最大额定功率运行研究(Simulink实现)_如何实现燃料电池大规模并网-程序员宅基地

文章浏览阅读260次。控制和电流谐振控制方法,增强了系统的稳定性,提高了供电质量。部分文献针对风力发电、太阳电池并网系统的小干扰稳定性进行研究,对燃料电池发电系统稳定性分析具有一定指导意义。文献[6,7]则分别建立太阳电池和风力发电系统的小信号模型,利用特征值分析法对系统的小干扰稳定性进行分析。文献[8]在光伏发电系统控制器参数进行全局优化以提高系统稳定性,但只考虑特征值作为单一优化目标,没有考虑阻尼比对系统稳定的影响,影响了控制参数的优化效果。在该模型中,燃料电池连接到电网,并由基于功率的控制器控制。行百里者,半于九十。_如何实现燃料电池大规模并网

AGI要闻:斯坦福李飞飞首次创业,瞄准“空间智能”;OpenAI下周发布搜索产品挑战谷歌;新的开源 AI 眼镜来了|钛媒体AGI | 最新快讯

她的专业领域是计算机视觉和认知神经科学。对于这家新的初创公司介绍,一位消息人士提到,上个月,李飞飞在温哥华 TED 大会上演讲中表示,最前沿的 AI 研究涉及一种算法,这种算法可以合理地推断出图像和文字在三维环境中的样子,并根据这些预测采取行动,这种算法使用的概念叫做“空间智能”。让机器狗在瑜伽球上保持平衡是很有挑战的任务,在没有大语言模型之前需要人去调整参数,但现在像 GPT-4 这样的大语言模型,因为本身就具备了丰富的物理知识,所以大语言模型可以代替人类去调整参数,并根据反馈的结果进行推理和参数调整。

Pytorch加载本地自己整理好的cifar10或cifar100数据集,并进行训练_cifar100 pytorch-程序员宅基地

文章浏览阅读6.7k次,点赞11次,收藏49次。Pytorch加载本地自己整理好的cifar10数据集,并进行训练这里写自定义目录标题1.下载数据集2.解压3.复制移动4.修改tv.datasets.CIFAR10源码使用pytorch在线下载cifar10数据集时,经常报错,而且很慢,倘若下载cifar100,那等待时间可想而知了。为了不浪费时间等待,可以将数据集先下载到本地,在自行加载,下面介绍一种修改源码简单的方法。1.下载数据集(随意下载,官网地址:http://www.cs.toronto.edu/~kriz/cifar-10-pytho_cifar100 pytorch

大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!

这些问题标志着我后续研究的重点方向,需要我继续深入学习AVFoundation框架的使用,特别是其控制摄像头的具体方法,并探索如何将这些控制整合到机械臂的运动调整中,以确保最终拍摄出的视频质量符合预期。尽管目前市场上有许多稳定设备如平衡环架(gimbal)来辅助拍摄,以求达到稳定和多角度的拍摄效果,但在此篇文章中,我将探索一种独特的解决方案:通过将手机安装在机械臂的末端来进行拍摄,以实现那些传统方法难以捕捉的特殊视角。随着人工智能技术的不断进步和普及,AI与机器人的结合无疑将成为未来技术发展的重要趋势。

随便推点

第十五周 项目 1 - 验证算法_insertht(hashtable ha[], int& n, int m, int p, key-程序员宅基地

文章浏览阅读316次。/* *Copyright (c) 2016,烟台大学计算机学院 *All right reserved. *文件名称:test.cpp *作者:杨天瑞 *完成日期:2016年12月16日 *版本号:v1.7.5 * * 问题描述:验证算法。 * 程_insertht(hashtable ha[], int& n, int m, int p, keytype k)

react-native之项目结构分析_react native课程的项目分析-程序员宅基地

文章浏览阅读6k次,点赞5次,收藏10次。前言庖丁为文惠君解牛,手之所触,肩之所倚,足之所履,膝之所踦,砉然响然,奏刀騞然,莫不中音。合于桑林之舞,乃中经首之会。熟悉项目的结构,是开发的基本也是技术提升的一个重要途径,现总结下自己对react-native项目结构的分析与理解。正文项目结构init 的一个项目结构如图:tests:测试文件夹,执行命令 “npm test”会调用此文件夹,在文件夹中需要引入待测试文件。android:An_react native课程的项目分析

uniapp开发公众号,微信开发者工具进行本地调试_uniapp使用微信开发者工具 利用公众号调试的方法-程序员宅基地

文章浏览阅读584次。uniapp开发公众号,微信开发者工具进行本地调试_uniapp使用微信开发者工具 利用公众号调试的方法

【内网安全】Cobalt Strike 使用_cobalt strike argue-程序员宅基地

文章浏览阅读2.1k次。文章目录Beacon命令argue参数污染Beacon命令argue参数污染argue net1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxArgueexecute net1 user test test123 /addexecute net1 localgroup administrators test /addargue 进程参数欺骗argue [command] [fake arguments]argue 命令 假参数 欺骗某个命令参数argue [com_cobalt strike argue

Qt在线安装教程(详细图文)_qt安装教程-程序员宅基地

文章浏览阅读3.2w次,点赞67次,收藏230次。大家好我是ζ小菜鸡,小伙伴们,让我们一起来学习Qt在线安装。(一起努力,咱们顶峰相见!!!)_qt安装教程

【PTA题目解答】 6-4 输入年份和天数,输出对应的年、月、日 (15分)_要求定义和调用函数month_day ( year, yeardy, *pmonth, *pday…-程序员宅基地

文章浏览阅读7.4k次,点赞7次,收藏7次。6-4输入年份和天数,输出对应的年、月、日(15分)要求定义和调用函数month_day ( year, yeardy, *****pmonth, *pday),通过参数pmonth和pday返回计算得出的月和日。例如,输入2000和61,分别返回3和1,即2000年的第61天是3月1日。函数接口定义:void month_day ( year, yeardy, *pmonth, *pday)其中year是年,yearday是天数,****pmonth和pday是计算得出的月和日。..._要求定义和调用函数month_day ( year, yeardy, *pmonth, *pday…

推荐文章

热门文章

相关标签