L3 Forwarding Graph 示例使用
概述
L3 转发图应用程序是使用 DPDK 图框架进行数据包处理的一个简单示例。该应用程序利用图框架和为图框架编写的节点执行 L3 转发。
概念简介:
- DPDK 图框架:DPDK 提供了一个灵活的图框架,用于设计和实现数据包处理应用程序。
- L3 转发:L3 转发指的是网络层(如 IP 层)的转发功能,它根据数据包的目的 IP 地址来决定数据包的路由路径。
- 节点:在 DPDK 图框架中,节点是执行特定功能的构建块,可以是简单的操作,如修改数据包头部,也可以是更复杂的处理,如查找转发表。
该示例展示了 DPDK 图框架和图节点的使用,其中涉及了 ethdev_rx
, pkt_cls
, ip4_lookup/ip6_lookup
, ip4_rewrite/ip6_rewrite
, ethdev_tx
和 pkt_drop
这些节点。
源码下载编译与运行
说明:本文基于 DPDK master 分支最新代码
源码下载:
git clone https://github.com/DPDK/dpdk.git
编译:
cd dpdk/
若只编译库、驱动、测试应用程序,使用下面的命令:
meson build
ninja -C build
若示例也要一起编译,meson
命令要增加参数:
# 编译所有示例
`meson -Dexamples=all build`
# 编译指定示例:如 l3fwd graph
`meson -Dexamples=l3fwd-graph build`
# ninja 命令是一样的
ninja -C build
l3fwd-graph 示例源码路径:dpdk/examples/l3fwd-graph
,编译完成后的应用程序输出目录:dpdk/build/examples/
,程序名字:dpdk-l3fwd-graph
。
程序运行:
./dpdk-l3fwd-graph [EAL options] -- -p PORTMASK
[-P]
--config(port,queue,lcore)[,(port,queue,lcore)]
[--eth-dest=X,MM:MM:MM:MM:MM:MM]
[--max-pkt-len PKTLEN]
[--no-numa]
[--per-port-pool]
[--pcap-enable]
[--pcap-num-cap]
[--pcap-file-name]
[--model]
参数说明:
-p PORTMASK
:端口掩码,通过十六进制值定义哪些网络端口应该被配置。-P
:可选,将所有端口设置为混杂模式。启用此选项后,网络接口将接收所有经过它的数据包,而不考虑数据包的目的 MAC 地址。如果不启用此选项,则只接受目的 MAC 地址为端口 MAC 地址的数据包。--config (port,queue,lcore)[,(port,queue,lcore)]
:指定哪个端口的哪个队列应该被映射到哪些核心上进行处理。--eth-dest=X,MM:MM:MM:MM:MM:MM
:可选,指定端口 X 的目的 MAC 地址。--max-pkt-len
:可选,设置数据包的最大长度,十进制数。--no-numa
:可选,禁用 NUMA 感知功能。--per-port-pool
:可选,为每个端口设置独立缓冲区,而不是共享一个缓冲区。--pcap-enable
:可选,启用 pcap 抓包功能。--pcap-num-cap
:可选,指定抓包数量。--pcap-file-name
:可选,指定 pcap 抓包的输出文件名。--model
:可选,选择图遍历模型。可选择rtc
或dispatch
模型。
举例说明:
./dpdk-l3fwd-graph -l 1,2 -n 4 -- -p 0x3 --config="(0,0,1),(1,0,2)"
使用 CPU 核 1 和核 2,两个 port,端口 0 的队列 0 与核 1 绑定,端口 1 的队列 0 与核 2 绑定。