DPDK — PDUMP 抓包工具

目录

前文列表

DPDK — 安装部署
DPDK — TestPMD
linux

DPDK PDUMP

pdump 库是在 DPDK 16.07 版本引入的一个 DPDK 数据包捕获框架(抓包工具)。由于 DPDK App 是彻底内核旁路的用户态网络协议栈,因此没法使用 tcpdump 工具来进行抓包。使用 DPDK pdump 能够用于抓取被 DPDK App 接管的指定接口、队列的数据包。vim

安装部署

DPDK pdump 抓包工具依赖基于 libpcap 的 PMD 驱动,须要预先安装:网络

  • libpcap 网络数据包捕获函数库(A system-independent interface for user-level packet capture)。
  • libpcap-devel 用于编译和使用基于 libcap 的 PMD 轮询模式驱动程序。
yum install -y libpcap.x86_64 libpcap-devel.x86_64

默认状况下,该驱动程序被禁用,须要经过修改 Target Env 的配置文件来开启:并发

$ vim dpdk-18.08/x86_64-native-linuxapp-gcc/.config
CONFIG_RTE_LIBRTE_PMD_PCAP=y
CONFIG_RTE_LIBRTE_PDUMP=y

$ make

最后再安装 pdump:app

$ cd dpdk-18.08/app/pdump
$ make && make install

运行原理

在使用 pdump 时,pdump 会做为 “Secondary 进程” 依附于 “Primary 进程”,即 DPDK App,例如:testpmd、l2fwd、l3fwd。Primary 进程做为 Server 端,初始化 pdump 抓包框架。而 Secondary 进程则做为 Client 端向 Primary 进程发送 Start/Stop 抓包的请求,而后 Primary 进程会拷贝一份数据包到 Ring 中,Secondary 进程再从 Ring 中读取出来,并发送到 pcap pmd 设备。能够保存为 pcap 文件,也能够经过 Linux Console 输出。框架

在这里插入图片描述

操做步骤

以 testpmd 为例,使用 dpdk-pdump 进行抓包。socket

  1. 启动 testpmd 做为 Primary
$ ./testpmd -l 1,2,3 --socket-mem 1024 -n 4 --log-level=8 -- -i
  1. 启动 dpdk-pdump 做为 Secondary
$ ./build/app/dpdk-pdump -- --pdump 'port=0,queue=*,rx-dev=/tmp/capture.pcap'
  1. 查看 pcap 文件
$ tcpdump -nr /tmp/capture.pcap

dpdk-pdump 指令

./build/app/dpdk-pdump -- --pdump '(port=<port id> | device_id=<pci id or vdev name>), (queue=<queue_id>), (rx-dev=<iface or pcap file> | tx-dev=<iface or pcap file>), [ring-size=<ring size>], [mbuf-size=<mbuf data size>], [total-num-mbufs=<number of mbufs>]' [--server-socket-path=<server socket dir>] [--client-socket-path=<client socket dir>]
  • –pdump:是必选的,多个 --pdump 能够用于捕获不一样的接口和队列
  • –server-socket-path:是可选的,指定 Server socket 的目录。root 用户就默认为 /var/run/.dpdk/,非 root 用户默认为 ~/.dpdk/。
  • –client-socket-path:是可选的,指定 Client Socket 的目录。root 用户就默认为 /var/run/.dpdk/,非 root 用户默认为 ~/.dpdk/。

–pdump 的子参数:tcp

  • port:须要被抓包的以太网 Port id。
  • device_id:须要被抓包的以太网 PCI 设备的 id。
  • queue:须要被抓包的以太网 PCI 设备的 Queue id,* 表示全部队列。
  • rx-dev:入口方向被抓取的报文,参数应该是一个 pcap 文件名或者 Linux 接口。
  • tx-dev:出口方向被抓取的报文,参数应该是一个 pcap 文件名或者 Linux 接口。

NOTE:若是两个方向都分别要,tx-dev 与 rx-dev 应该被同时指定两个不一样的文件或者接口;若是两个方向都同时要,tx-dev 与 rx-dev 应该指定相同的文件或接口。函数

  • ring-size:指定用于存储数据包的 Ring 的大小,默认是16384。用于主程序向抓包程序入队用的。
  • mbuf-sizze:MBuf Data 的 大小,用于 mempool 的建立,默认是2176。用于入队列的mbuf用的。用于主程序向抓包程序传数据用的。
  • total-num-mbufs:指建立 mbug 的个数,默认值为 65535。
相关文章
相关标签/搜索