ref: Dpdk programmer’s guidehtml
dpdk不只提供针对物理和虚拟网卡的pmd驱动(Poll Mode Drivers),还提供两个纯软件的pmd驱动,libpcap pmd就是其中之一。Libpcap pmd使用libpcap库读写报文,读写的源能够是文件,也能够是使用Linux内核驱动的物理网卡。linux
在没有或不方便配置物理网卡的机器上,使用libpcap pmd能够帮助dpdk应用开发人员进行功能性测试或代码调试;更重要的是,EAL(Environment Abstart Layer)之上的dpdk应用程序对于其底层用的是真实网卡pmd,仍是libpcap pmd,是透明的,开发人员无需修改代码就可使用libpcap pmd带来的便利。ubuntu
Dpdk默认的配置文件里没有打开libpcap pmd支持。若是是Linux下编译,须要修改<dpdk>/config/common_linuxapp,将其中的app
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=ntcp
改成ide
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=y。测试
另外,还须要安装libpcap开发包,在ubuntu上安装的命令是ui
sudo apt-get install libpcap-devspa
而后从新编译dpdk便可。调试
全部dpdk应用程序都运行在EAL之上,而EAL提供了—vdev选项,可能经过它来指定使用libpcap pmd。格式以下:
app -c f -n 4 --vdev='eth_pcap0,stream_opt0=..,stream_opt1=..' --vdev='eth_pcap1,stream_opt0=..'
能够配置多个伪设备(pseudo-ethernet device),每一个设备的名称必须以eth_pcap开头,而后跟数字或字母。每一个设备均可以配置多个流选项(stream options),流选项以前使用逗号隔开,不能有空格符。
2.2.1 流选项
流选项包括:
由上可见,libpcap pmd不只支持将pcap文件模拟为Rx/Tx的功能,也支持Linux驱动的普通网卡。在使用中咱们能够随意组合,好比Rx设为eth0,而Tx设为tx.pcap,或者二者都是eth0或pcap文件。
2.2.2 命令举例
Testpmd:
./testpmd -c 3 -n 4 --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=2
据以前的官方文档中说,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 3 -n 4 --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 3
再强调一下:--vdev的值字符串,即单引号括起来的内容中,不能有空格,不然会出错。