【dpdk】使用libpcap-PMD驱动收发包
1. 概述
dpdk不仅提供针对物理和虚拟网卡的pmd驱动(Poll Mode Drivers),还提供两个纯软件的pmd驱动,libpcap pmd就是其中之一。Libpcap pmd使用libpcap库读写报文,读写的源可以是文件,也可以是使用Linux内核驱动的物理网卡。
在没有或不方便配置物理网卡的机器上,使用libpcap pmd可以帮助dpdk应用开发人员进行功能性测试或代码调试;更重要的是,EAL(Environment Abstart Layer)之上的dpdk应用程序对于其底层用的是真实网卡pmd,还是libpcap pmd,是透明的,开发人员无需修改代码就可以使用libpcap pmd带来的便利。
2. 编译与配置
2.1 编译
Dpdk默认的配置文件里没有打开libpcap pmd支持。如果是Linux下编译,需要修改<dpdk>/config/common_linuxapp,将其中的
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n
改为
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=y。
另外,还需要安装libpcap开发包,在ubuntu上安装的命令是
sudo apt-get install libpcap-dev
然后重新编译dpdk即可。
2.2 使用
所有dpdk应用程序都运行在EAL之上,而EAL提供了—vdev选项,可能通过它来指定使用libpcap pmd。格式如下:
app -c f -n --vdev='eth_pcap0,stream_opt0=..,stream_opt1=..' --vdev='eth_pcap1,stream_opt0=..'
可以配置多个伪设备(pseudo-ethernet device),每个设备的名称必须以eth_pcap开头,然后跟数字或字母。每个设备都可以配置多个流选项(stream options),流选项之前使用逗号隔开,不能有空格符。
2.2.1 流选项
流选项包括:
- rx_pcap 将一个pcap文件设为Rx流,参数为pcap文件路径。Libpcap pmd驱动会读取文件中的每个包,就好像从实际网口读一样。这个pcap文件必须存在且有效。如 rx_pcap=/home/dev/test.pcap
- tx_pcap 将一个pcap文件设为Tx流。此文件将会自动创建和重写。
- rx_iface 将一个使用Linux内核驱动的物理网口设为Rx流。如rx_iface=eth0
- tx_iface 将一个使用Linux内核驱动的物理网口设为Tx流。
- iface 映射一个物理网口,libpcap pmd驱动将从此口读写报文。如 iface=eth0
由上可见,libpcap pmd不仅支持将pcap文件模拟为Rx/Tx的功能,也支持Linux驱动的普通网卡。在使用中我们可以随意组合,比如Rx设为eth0,而Tx设为tx.pcap,或者两者都是eth0或pcap文件。
2.2.2 命令举例
Testpmd:
./testpmd -c -n --vdev='eth_pcap0,rx_pcap=/home/zzq/tcp.pcap,tx_pcap=/home/zzq/tx0.pcap' --vdev='eth_pcap1,rx_pcap=/home/zzq/tcp.pcap,tx_pcap=/home/zzq/tx1.pcap' -- --port-topology=chained --no-flush-rx -i --nb-ports=
据之前的官方文档中说,testpmd在开始报文转发前会从每个Rx口收512个报文并丢弃,而使用libpcap pmd时,可以通过—no-flush-rx选项来禁用这个特性。另外,据我试用,--nb-ports=2将port数设为2,否则多个port之间会有影响,不利于测试。
运行后,eth_pcap1的Tx对应文件将保存eth_pcap0的Rx对应文件中的报文,eth_pcap0的Tx对应文件将保存eth_pcap1的Rx对应文件中的报文。Rx对应的文件都只会读取一轮。
L2fwd:
./l2fwd -c -n --vdev='eth_pcap0,rx_pcap=/home/zzq/tcp.pcap,tx_pcap=/home/zzq/tx0.pcap' --vdev='eth_pcap1,rx_pcap=/home/zzq/tcp.pcap,tx_pcap=/home/zzq/tx1.pcap' -- -p
再强调一下:--vdev的值字符串,即单引号括起来的内容中,不能有空格,否则会出错。
【dpdk】使用libpcap-PMD驱动收发包的更多相关文章
- [development][dpdk][pktgen] 网卡收发包性能测试
一: 多队列及中断信息收集 [root@T185 ~]# ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: RX Mini ...
- DPDK收发包全景分析
前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mem ...
- kernel笔记——网络收发包流程
本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个 ...
- UDP收发buffer尺寸对收发包流量的影响
下午验证一个高流量发包问题时,发现了一个值得记录的问题:socket的收发buffer尺寸是会影响收发包的效率的,高流量通讯时,若socket的收发buffer尺寸过小会一定程度降低收发包效率. 自己 ...
- 交换芯片收发包的 DMA 实现原理
交换芯片支持:报文.计数.表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换 ...
- python 爬虫 ~ 查看收发包的情况
DebugLog 可以用来查看收发包的情况,比较有意思,现特意记录下来: Sample: import urllib2 httpHandler = urllib2.HTTPHandler(debugl ...
- linux系统上用户态pppoe收发包过程
花了几天看了一下ppp/pppoe有关的东西,画了一下用户态pppoe收发包的示意图.
- [development][dpdk][pktgen] 网卡收发包性能测试-详细数据
三层包测试 发包方式:192.168.20.205 发包工具:pktgen 发包网卡:i350 收包设备:1922.168.20.185 CPU:Intel(R) Xeon(R) CPU E5-262 ...
- Linux 网卡驱动学习(五)(收发包具体过程)【转】
转自:https://blog.csdn.net/xy010902100449/article/details/47362787 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...
随机推荐
- SpringMVC环境搭建和详解
1.Spring容器和SpringMVC容器是父子容器 1.1 SpringMVC容器可以调用Spring容器中的所有内容 1.2 图示 2.SpringMVC环境搭建 1.导入jar包 2.在web ...
- Yii2 数据库查询汇总
1.基础查询 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find( ...
- 解决mysql默认的8小时自动断开连接
语言:javaEE 框架:spring mvc+spring+mybatis 数据库:mysql8 WEB服务器:tomcat8 背景: 在试运营阶段发现发生“连接超时”异常 抛出异常: Cause: ...
- window.frames
// 点击事件 function zTreeOnClick(event, treeId, treeNode) { id = treeNode.id; window.frames["treeF ...
- vue父传子
父组件传递数据给子组件用props,父组件中使用子组件,子组件用props接收父组件数据. Home父组件代码: <template> <div> {{test}} <! ...
- js setInterval详解
[自己总结]: 语法 setInterval(code,interval) ①可以有第三个参数,第三个参数作为第一个参数(函数)的参数 ②第一个参数是函数,有三种形式: 1.传函数名,不用加引号,也 ...
- 整合Spring+Struts2+Mybatis加spring单元测试等
前言 自己是在CentOS7的IntelliJ IDEA里开发的,里面中文输入法有问题经常用不了,所以这里用了很多chinglish,希望不要介意: 一:pom依赖 <?xml version= ...
- 学以致用十四-----打造一个简单的vim IDE
一.安装dircolors git clone https://github.com/seebi/dircolors-solarized.git cd dircolors-solarized/ mv ...
- 论文翻译技巧--Notepad替换回车
- 工作总结(二):Web Design
PHP框架:CakePHP 前端框架:Bootstrap Payment Data Transfer:https://developer.paypal.com/docs/classic/paypal- ...