参考文献:
http://aidaiz.com/dpdk_l2fwd/
https://blog.csdn.net/cling60/article/details/77920413
//www.greatytc.com/p/39b0c6c3eb62
如有侵权,请联系删除
L2FWD(L2 forwarding sample application) 实现了第二层(链路层)的数据包转发。
相关版本配置信息
CenOS 7.2.1511
2核2线程 (4 lcores)
内存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的目标环境目录
cd /(RTE_SDK)/example/l2wfd
make
运行
./build/l2fwd -c f -n 4 -- -q 4 -p 0x3
表示,分配给4个逻辑内核,每个内核分别有4个收发队列,而一共分配了16个端口。
参数详解
./build/l2wfd [EAL options] -- -p PORTMASK [-q NQ -T t]
- EAL options
- DPDK EAL的默认参数,必须参数为-c COREMASK -n NUM。
- COREMASK:一个十六进制位掩码表示分配的逻辑内核数量。
- NUM:一个十进制整数表示每个逻辑内核的内存通道数量。
- -p PORTMASK
PORTMASK:一个十六进制位掩码表示分配的端口数量。0x3是指 后两位为1,也就是起点两个端口 - -q NQ
NQ:表示分配给每个逻辑内核的收发队列数量。 - -T t
t: 表示打印统计数据到屏幕上的时间间隔,默认为10秒。
测试
./build/l2fwd -c 0x3 -n 4 -- -p 3 -q 1
本例中实现了相邻端口之间的相互转发。比如一共4个端口可用,那么端口1收到数据后会转发给端口2,端口2收到数据后会转发给端口1,端口3和端口4也会相互转发。
pktgen发包到l2fwd转发
-
测试环境
两个虚拟机VM1,VM2
- 修改l2fwd源码(examples/l2fwd/main.c )
屏蔽开启混杂模式这一行rte_eth_promiscuous_enable(portid);
然后再重新编译新的l2fwd。 - 运行编译后的l2fwd
./build/l2fwd -c 0x3 -n 4 -- -p 3 -q 1
发现在非混杂模式下,端口没有收到包,因此没有转发。 - 运行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