【dpdk】使用libpcap-PMD驅動收發包

ref: Dpdk programmer’s guidehtml

1.  概述

    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

2.  編譯與配置

2.1  編譯

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便可。調試

2.2  使用

全部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  流選項

流選項包括:

  •   rx_pcap 將一個pcap文件設爲Rx流,參數爲pcap文件路徑。Libpcap pmd驅動會讀取文件中的每一個包,就好像從實際網口讀同樣。這個pcap文件必須存在且有效。如 rx_pcap=/home/dev/test.pcap
  •   tx_pcap 將一個pcap文件設爲Tx流。此文件將會自動建立和重寫。
  •   rx_iface 將一個使用Linux內核驅動的物理網口設爲Rx流。如rx_iface=eth0
  •   tx_iface 將一個使用Linux內核驅動的物理網口設爲Tx流。
  •   iface 映射一個物理網口,libpcap pmd驅動將今後口讀寫報文。如 iface=eth0

由上可見,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的值字符串,即單引號括起來的內容中,不能有空格,不然會出錯。

相關文章
相關標籤/搜索