DPDK pdump抓包說明


一.環境與編譯

pdump庫是在16.07版本引入的,提供了一個抓包調試功能。在$(RTE_SDK)/app目錄下就有一個dpdk-pdump的工具。配置這個這個工具可以用於抓取指定接口、隊列的數據包。

1.1 庫及依賴

Pdump依賴於libpcap庫及libpcap-dev等相關庫,要預先安裝。

1.2 編譯選項

Pdump依賴於基於libpcap的PMD驅動,需要開啟兩個設置,來生成運行pdump工具

  1. CONFIG_RTE_LIBRTE_PMD_PCAP=y ($(RTE_SDK)/config/common_base文件)
  2. CONFIG_RTE_LIBRTE_PDUMP=y ($(RTE_SDK)/config/common_base文件)

1.3 編譯dpdk-pdump

這里以17.02版本為例說明。按照官方文檔,在$(RTE_SDK)目錄下,

  1. 設置編譯的目錄 export RTE_SDK=XXX ,XXX就是dpdk的源碼包的目錄
  2. 設置編譯后的安裝目錄(主要就是拷貝生成的庫,頭文件等) export DESTDIR=XXX,這個安裝目錄可以自行設置。推薦自己建一個目錄,好找就行,生成的pdump工具就在這個目錄里。
  3. 執行編譯安裝 make install T=x86_64-native-linuxapp-gcc;這里的T是指編譯的TARGET,根據機器和編譯器選擇組合,具體可參考官方文檔——《Getting started Guide For Linux》

二. 測試與使用

在編譯安裝后,就會在安裝目錄的bin目錄中發現dpdk-pdump可執行文件。可以拷貝出來后續運行。

2.1 運行原理

dpdk-pdump使用時,作為secondary進程依附於primary進程。primary進程中啟動server端,初始化pdump抓包框架任務;dpdk-pdump進程是作為client端向primary進程發送開始/停止抓包請求,然后primary進程拷貝一份數據包到ring中,secondary進程從ring中讀取出來,並保存為pcap文件。因此,可以看出在primary進程中需要初始化pdump server。

2.2 簡單示例

  1. 在示例中,使用l3fd來當primary進程,但是需要做些小修改,在rte_eal_init()后,初始化pdump框架,添加如下代碼:
#ifdef RTE_LIBRTE_PDUMP
	/* initialize packet capture framework */
	rte_pdump_init(NULL);
#endif
然后編譯l3fd生成l3fd可執行文件,就以官方例子參數運行。
  1. 運行dpdk-pdump,作為secondary進程,依附於前面啟動的l3fd。執行如下參數命令: ./dpdk-pdump -- --pdump 'port=0,queue=*,rx-dev=/tmp/rx.pcap'
    這里需要注意port的取值,一定是DPDK綁定的網卡,如綁定了3張網卡,那port取值范圍就是0-2,對應於每個網卡。自然,也可以使用PCI號來傳參,指明抓哪個網卡。Dev=/tmp/rx.pcap就指明了最后抓的包存放的路徑。

更詳細的dpdp-pdump運行參數可以根據情況設置,格式如下:

usage: %s [EAL options] -- --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>default:16384],"
			"[mbuf-size=<mbuf data size>default:2176],"
			"[total-num-mbufs=<number of mbufs>default:65535]'\n"
			"[--server-socket-path=<server socket dir>"
				"default:/var/run/.dpdk/ (or) ~/.dpdk/]\n"
			"[--client-socket-path=<client socket dir>"
				"default:/var/run/.dpdk/ (or) ~/.dpdk/]\n"
注意:參數中注意單引號那個字符,還有指定server-socket-path的路徑時的”\n”字符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM