【dpdk】使用libpcap-PMD驱动收发包

ref: Dpdk programmer’s guide

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 4 --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 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 

时间: 2024-10-16 03:42:21

【dpdk】使用libpcap-PMD驱动收发包的相关文章

UDP收发buffer尺寸对收发包流量的影响

下午验证一个高流量发包问题时,发现了一个值得记录的问题:socket的收发buffer尺寸是会影响收发包的效率的,高流量通讯时,若socket的收发buffer尺寸过小会一定程度降低收发包效率. 自己先分别获取了一下Windows/Linux系统中默认的收发包尺寸值在x86 Win7环境里实际程序验证结果为 $ ./sockopt.exe UDP socket options: receive buffer: 0x2000 send buffer: 0x2000 TCP socket optio

DPDK收发包处理流程-----(一)网卡初始化

本文基于DPDK-1.8.0分析. 网卡驱动模型一般包含三层,即,PCI总线设备.网卡设备以及网卡设备的私有数据结构,即将设备的共性一层层的抽象,PCI总线设备包含网卡设备,网卡设备又包含其私有数据结构.在DPDK中,首先会注册设备驱动,然后查找当前系统有哪些PCI设备,并通过PCI_ID为PCI设备找到对应的驱动,最后调用驱动初始化设备. 一.网卡驱动注册 以e1000网卡驱动为例说明. 在1.8.0版本中,网卡驱动的注册使用了一种奇技淫巧的方法,使用GCC attribute扩展属性的con

Linux 网卡驱动学习(五)(收发包具体过程)

函数接口 设备初始化函数 网络设备驱动在 Linux 内核中是以内核模块的形式存在的,对应于模块的初始化,需要提供一个初始化函数来初始化网络设备的硬件寄存器.配置 DMA 以及初始化相关内核变量等.设备初始化函数在内核模块被加载时调用,它的函数形式如下: static int __init xx_init (void) { -- } module_init(xx_init); // 这句话表明模块加载时自动调用 xx_init 函数 设备初始化函数主要完成以下功能: 1. 硬件初始化 因为网络设

DPDK--Skeleton 单核收发包测试案例 源码阅读

#include <stdint.h> #include <inttypes.h> #include <rte_eal.h> #include <rte_ethdev.h> #include <rte_cycles.h> #include <rte_lcore.h> #include <rte_mbuf.h> #define RX_RING_SIZE 128 //接收环大小 #define TX_RING_SIZE 512

在Linux上为指定IP端口模拟网络收发包延迟

编写 网络应用程序时,我们一般都是在网络状况良好的局域网甚至是本机内进行测试调试.有没有办法在网络状况良好的内网环境中,在不改动程序自身代码的前提下, 为应用程序模拟复杂的外网环境——尤其是网络延迟呢?这是我在学校写网络程序时就有过的想法,只是一直没认真研究,直到最近在公司编写跨服代码. 跨服涉及多台服务器之间,还有服务器与客户端之间的通讯,流程很复杂,其中每一步都要正确处理网络异常延迟与断开的情况.测试人员通过改代码或下断点的方式来测试网络延迟是极麻烦的,而且能模拟的延迟用例也很有限.因此如果

[ovs][dpdk] ovs-dpdk 线程数,收包队列,core绑定

http://docs.openvswitch.org/en/latest/intro/install/dpdk/?highlight=dpdk 绑定2,4,6, 8核 [[email protected] ~]# ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x0154 设置4个收包队列 [[email protected] ~]# ovs-vsctl set Interface dpdk-p0 options:n_rxq=4

DPDK17.02入门手册

Linux环境下DPDK入门 Release 17.02.0 目录 Linux环境下DPDK入门... 1 1       引言... 2 2       资料集... 2 3       系统需求... 2 3.1        x86平台的先决条件BIOS设置... 2 3.2        编译DPDK. 3 3.3        运行DPDK程序... 3 4       编译DPDK源码... 5 4.1        安装DPDK和浏览源码... 5 4.2        安装DPD

[development][dpdk] 网卡收包性能测试

一: 多队列及中断信息收集 [[email protected] ~]# ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: 4096 RX Mini: 0 RX Jumbo: 0 TX: 4096 Current hardware settings: RX: 512 RX Mini: 0 RX Jumbo: 0 TX: 512 [[email protected] ~]# ls /sys/class/net/eth0/

DPDK转发

一.网络IO的处境和趋势 从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10GE/25GE/40GE/100GE的演变,从中可以得出单机的网络IO能力必须跟上时代的发展. 1. 传统的电信领域 IP层及以下,例如路由器.交换机.防火墙.基站等设备都是采用硬件解决方案.基于专用网络处理器(NP),有基于FPGA,更有基于ASIC的.但是基于硬件的劣势非常明显,发生Bug不易修复,不易调试维护,并且网络技术一直在发展,例如2G/3G/4G/5G等移动技术的革新,这些属于业务