參考文獻(xiàn):
http://aidaiz.com/dpdk_l2fwd/
https://blog.csdn.net/cling60/article/details/77920413
http://www.reibang.com/p/39b0c6c3eb62
如有侵權(quán)钾怔,請(qǐng)聯(lián)系刪除
L2FWD(L2 forwarding sample application) 實(shí)現(xiàn)了第二層(鏈路層)的數(shù)據(jù)包轉(zhuǎn)發(fā)供炎。
相關(guān)版本配置信息
CenOS 7.2.1511
2核2線程 (4 lcores)
內(nèi)存4GB
3 NICS
DPDK17.08
pktgen 3.4.2
編譯
export RTE_SDK=/root/dpdk-stable-17.08.1 DPDK的安裝目錄
export RTE_TARGET=x86_64-native-linuxapp-gcc DPDK的目標(biāo)環(huán)境目錄
cd /(RTE_SDK)/example/l2wfd
make
運(yùn)行
./build/l2fwd -c f -n 4 -- -q 4 -p 0x3
表示,分配給4個(gè)邏輯內(nèi)核,每個(gè)內(nèi)核分別有4個(gè)收發(fā)隊(duì)列舶斧,而一共分配了16個(gè)端口。
參數(shù)詳解
./build/l2wfd [EAL options] -- -p PORTMASK [-q NQ -T t]
- EAL options
- DPDK EAL的默認(rèn)參數(shù),必須參數(shù)為-c COREMASK -n NUM。
- COREMASK:一個(gè)十六進(jìn)制位掩碼表示分配的邏輯內(nèi)核數(shù)量外厂。
- NUM:一個(gè)十進(jìn)制整數(shù)表示每個(gè)邏輯內(nèi)核的內(nèi)存通道數(shù)量。
- -p PORTMASK
PORTMASK:一個(gè)十六進(jìn)制位掩碼表示分配的端口數(shù)量代承。0x3是指 后兩位為1汁蝶,也就是起點(diǎn)兩個(gè)端口 - -q NQ
NQ:表示分配給每個(gè)邏輯內(nèi)核的收發(fā)隊(duì)列數(shù)量。 - -T t
t: 表示打印統(tǒng)計(jì)數(shù)據(jù)到屏幕上的時(shí)間間隔论悴,默認(rèn)為10秒掖棉。
測(cè)試
./build/l2fwd -c 0x3 -n 4 -- -p 3 -q 1
本例中實(shí)現(xiàn)了相鄰端口之間的相互轉(zhuǎn)發(fā)。比如一共4個(gè)端口可用膀估,那么端口1收到數(shù)據(jù)后會(huì)轉(zhuǎn)發(fā)給端口2幔亥,端口2收到數(shù)據(jù)后會(huì)轉(zhuǎn)發(fā)給端口1,端口3和端口4也會(huì)相互轉(zhuǎn)發(fā)玖像。
pktgen發(fā)包到l2fwd轉(zhuǎn)發(fā)
-
測(cè)試環(huán)境
兩個(gè)虛擬機(jī)VM1紫谷,VM2
- 修改l2fwd源碼(examples/l2fwd/main.c )
屏蔽開啟混雜模式這一行rte_eth_promiscuous_enable(portid);
然后再重新編譯新的l2fwd齐饮。 - 運(yùn)行編譯后的l2fwd
./build/l2fwd -c 0x3 -n 4 -- -p 3 -q 1
發(fā)現(xiàn)在非混雜模式下捐寥,端口沒有收到包,因此沒有轉(zhuǎn)發(fā)祖驱。 - 運(yùn)行pktgen
./app/x86_64-native-linuxapp-gcc/pktgen -l 0-1 -n 3 -- -P -m "[1].0"
set 0 dst ip 192.168.74.132
set 0 dst mac 00:0c:29:45:e2:b9
set 0 count 1000
start 0