DPDK — PDUMP 抓包工具

目錄

前文列表

DPDK — 安裝部署
DPDK — TestPMD

DPDK PDUMP

pdump 庫是在 DPDK 16.07 版本引入的一個 DPDK 數據包捕獲框架(抓包工具)。因爲 DPDK App 是完全內核旁路的用戶態網絡協議棧,所以無法使用 tcpdump 工具來進行抓包。使用 DPDK pdump 可以用於抓取被 DPDK App 接管的指定接口、隊列的數據包。

安裝部署

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:

$ 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 進行抓包。

  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 的子參數:

  • 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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章