DPDK L2FWD使用

参考文献:
http://aidaiz.com/dpdk_l2fwd/
https://blog.csdn.net/cling60/article/details/77920413
https://www.jianshu.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也会相互转发。

DPDK L2FWD使用_第1张图片

pktgen发包到l2fwd转发

  • 测试环境
    两个虚拟机VM1,VM2


    DPDK L2FWD使用_第2张图片
  • 修改l2fwd源码(examples/l2fwd/main.c )
    屏蔽开启混杂模式这一行rte_eth_promiscuous_enable(portid);
    然后再重新编译新的l2fwd。
  • 运行编译后的l2fwd
    ./build/l2fwd -c 0x3 -n 4 -- -p 3 -q 1
    DPDK L2FWD使用_第3张图片

    发现在非混杂模式下,端口没有收到包,因此没有转发。
  • 运行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
DPDK L2FWD使用_第4张图片

你可能感兴趣的:(DPDK L2FWD使用)