ref: Dpdk programmer’s guidehtml
dpdk不只提供針對物理和虛擬網卡的pmd驅動(Poll Mode Drivers),還提供兩個純軟件的pmd驅動,libpcap pmd就是其中之一。Libpcap pmd使用libpcap庫讀寫報文,讀寫的源能夠是文件,也能夠是使用Linux內核驅動的物理網卡。linux
在沒有或不方便配置物理網卡的機器上,使用libpcap pmd能夠幫助dpdk應用開發人員進行功能性測試或代碼調試;更重要的是,EAL(Environment Abstart Layer)之上的dpdk應用程序對於其底層用的是真實網卡pmd,仍是libpcap pmd,是透明的,開發人員無需修改代碼就可使用libpcap pmd帶來的便利。ubuntu
Dpdk默認的配置文件裏沒有打開libpcap pmd支持。若是是Linux下編譯,須要修改<dpdk>/config/common_linuxapp,將其中的app
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=ntcp
改成ide
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=y。測試
另外,還須要安裝libpcap開發包,在ubuntu上安裝的命令是ui
sudo apt-get install libpcap-devspa
而後從新編譯dpdk便可。調試
全部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 流選項
流選項包括:
由上可見,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
再強調一下:--vdev的值字符串,即單引號括起來的內容中,不能有空格,不然會出錯。