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


ref: Dpdk programmer’s guide

1.  概述

    dpdk不僅提供針對物理和虛擬網卡的pmd驅動(Poll Mode Drivers),還提供兩個純軟件的pmd驅動,libpcap pmd就是其中之一。Libpcap pmd使用libpcap庫讀寫報文,讀寫的源可以是文件,也可以是使用Linux內核驅動的物理網卡。

    在沒有或不方便配置物理網卡的機器上,使用libpcap pmd可以幫助dpdk應用開發人員進行功能性測試或代碼調試;更重要的是,EAL(Environment Abstart Layer)之上的dpdk應用程序對於其底層用的是真實網卡pmd,還是libpcap pmd,是透明的,開發人員無需修改代碼就可以使用libpcap pmd帶來的便利。

2.  編譯與配置

2.1  編譯

Dpdk默認的配置文件里沒有打開libpcap pmd支持。如果是Linux下編譯,需要修改<dpdk>/config/common_linuxapp,將其中的

CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n

改為

CONFIG_RTE_LIBRTE_PMD_AF_PACKET=y

另外,還需要安裝libpcap開發包,在ubuntu上安裝的命令是

sudo apt-get install libpcap-dev

然后重新編譯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的值字符串,即單引號括起來的內容中,不能有空格,否則會出錯。

 


免責聲明!

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



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