快速记录一下 dpdk-pktgen 的安装和基本使用过程。
前置工作:
- 安装 dpdk-20.11,可以参看 dpdk-20.11 编译和安装
dpdk-pktgen 有独立的 git 仓库,并且可以基于 meson 和 ninja 进行构建,因此安装过程很简单。
安装过程如下:
$ git clone git://dpdk.org/apps/pktgen-dpdk
$ cd pktgen-dpdk
$ git checkout master
$ meson build
$ cd build
$ ninja
$ ls -l app/pktgen //编译出来的可执行程序
-rwxr-xr-x 1 root root 477672 10月 19 12:59 app/pktgen
基本使用方法:
Usage: ./app/pktgen [EAL options] -- [-h] [-v] [-P] [-G] [-T] [-f cmd_file] [-l log_file] [-s P:PCAP_file] [-m <string>]
pktgen 支持的命令行参数挺多的,可以通过 pktgen --help 来详细查看。不过它像大多数基于 dpdk 的测试程序一样,命令行参数主要有两部分组成:
- EAL options
- pktgen 自有参数
其中,EAL options 参数部分可以参看 DPDK EAL parameters,最重要的一个参数就是 -l 参数,用它来指定使用的核列表,比如:-l 1,2 或者 -l 1-2,表示使用核 1 和核 2。值得注意的是,pktgen 至少要指定两个核,因为 pktgen 需要一个核与用户进行交互,比如响应测试过程中用户的输入。
pktgen 自有参数部分最重要的是 -m 参数,用它来指定网口与核之间的对应关系,比如:-m 2.0,表示让核 2 来处理网口 0。值得注意的是,若要指定多个对应关系,则需多次使用 -m 参数。如果要收包,最好也指定一下 -P 参数,表示让所有网口进入混杂模式,以便接收到所有数据包。
运行效果:
$ ./build/app/pktgen -l 1-3 -- -P -m 2.0 -m 3.1
可以在上面提供的 "Pktgen:/> " 命令交互行中进行各种设置,pktgen 支持很名命令,具体可以使用 "help" 命令进行查看,下面介绍几个常用的命令:
Pktgen:/> set 0 size 64 // 将网口 0 发包的帧大小设置 64 字节
Pktgen:/> set 0 src ip 192.168.0.1/32 // 将网口 0 发包的源 IP 设置为 192.168.0.1
Pktgen:/> set 0 dst ip 192.168.0.2 // 将网口 0 发包的目的 IP 设置为 192.168.0.2
Pktgen:/> start 0 // 启动网口 0 的发包过程
Pktgen:/> stop 0 // 停止网口 0 的发包过程
Pktgen:/> quit // 退出 pktgen 程序