一个面向 现代 DPDK 用户态数据面 / SmartNIC / DPU / rte_flow / representor 演进方向的项目。
当前版本已经从“纯骨架/可编译调用链”进一步收口到 Phase 1 真实数据面闭环基线:
- 主线只保留现代 DPDK 方式:用户态 DPDK 应用 + 现代运行环境准备。
- 不把 DPDK 17 的
igb_uio + KNI + 配套 ko当成当前工程目标。 - 保留 DPDK 17 旧模式说明文档,作为历史经验沉淀与面试材料。
- Phase 1 已接入真实 DPDK 主路径代码:EAL、mempool、ethdev、rx/tx burst、真实二三四层解析、最小 ACL/route/NAT/rewrite 调用链。
这不是最终产品版,但已经不再只是目录样机。
当前仓库应理解为:
一个以现代 DPDK 为目标、具备 Phase 1 真实主路径代码的工程基线。
它现在处于这样一个阶段:
- 工程结构已经稳定下来;
- mock 模式可实际编译与运行;
- 真实 DPDK 路径代码已经落地到
main / port_init / worker / parser / rewrite主线上; - 但容器里没有
libdpdk,所以本包中只验证了 mock 构建,没有在当前容器里完成真实 DPDK 链接验证。
include/dppd/公共头目录已建立app//lib//examples//tests//scenarios//docs/目录边界已收敛lib/offload/已拆为core / soft / rte_flow / hwlib/representor/、lib/switch/已作为后续扩展位保留docs/plans/中保留项目计划书原件
当前支持两种构建模式:
- 用于当前容器内实际验证
- 可完整编译
- 可运行主调用链
- 用构造的 ARP / IPv4 / UDP 报文验证 parser / pipeline / NAT rewrite
- 通过
pkg-config libdpdk链接真实 DPDK - 当前代码里已经接入真实 DPDK 主路径
- 需要目标机器上具备
libdpdk
这一版已经落地的真实主路径包括:
main.c- DPDK 模式下的 EAL 初始化入口
--分隔 EAL 参数与应用参数
port_init.c- mbuf pool 创建
- ethdev 配置
- rx/tx queue setup
- 端口启动与链路信息输出
worker.c- DPDK 模式真实
rte_eth_rx_burst / rte_eth_tx_burst - mock 模式构造真实协议报文而不是 fake len 占位
- DPDK 模式真实
parser.c- 真正解析 Ethernet / ARP / IPv4 / UDP / TCP 最小头部
pipeline_fwd.c- ARP 允许发送
- IPv4/UDP 进入 ACL + route 决策
nat_session.c- 最小 session table + 端口转换基线
pkt_rewrite.c- UDP 源端口改写 + IPv4/UDP checksum 重算
为了避免误判,这一版明确 还没有完成 下面这些内容:
- 多 worker /
rte_eal_remote_launch真正拉起 - per-lcore stats
- 配置文件真正加载到 ACL / route / NAT
- 真实 RSS 配置优化和队列映射调优
- 真实 rte_flow pattern/action 映射
- representor / transfer 的真实行为实现
- DPU / SmartNIC 硬件场景验证
- 当前容器内的真实
libdpdk链接验证
所以这版虽然已经进入“真实 DPDK 主路径代码”阶段,但仍应被视为:
Phase 1 真实闭环基线,而不是完整数据面平台成品。
.
├── app/ # 主程序、控制、worker、端口初始化、统计
├── include/dppd/ # 公共头文件
├── lib/
│ ├── common/ # 日志、checksum、RSS config 等
│ ├── pkt/ # parser / rewrite / ARP table / tx offload
│ ├── flow/ # pipeline / route / ACL / NAT
│ ├── offload/ # core/soft/rte_flow/hw
│ ├── representor/ # representor 抽象
│ └── switch/ # transfer pipeline 抽象
├── examples/ # 最小示例规划
├── scenarios/ # Intel/NVIDIA/通用场景文档
├── tests/ # Scapy / pdump / regression
├── scripts/ # 构建、运行、抓包、绑定脚本
└── docs/ # 架构、路线图、legacy 经验、计划书
./scripts/build.sh
./scripts/run_platform.sh --port 0 --rxq 1 --txq 1 --burst 32 --loops 1DPPD_BUILD_MODE=dpdk ./scripts/build.sh
./build/dppd -l 0-1 -n 4 -- --port 0 --rxq 1 --txq 1 --burst 32 --loops 1000说明:
-l 0-1 -n 4这类参数属于 EAL--后面的参数属于dppd应用本身
- 约 85%
- 目录边界、扩展位、文档主线已经比较稳定
- 约 75%
- mock 主路径可跑
- DPDK 主路径代码已经接入
- 约 45% ~ 55%
- 代码主路径已经落地
- 但还缺目标机上的真实编译、收包验证、发送验证和配置加载
app/main.capp/port_init.capp/worker.clib/pkt/parser.clib/pkt/pkt_rewrite.clib/flow/pipeline_fwd.clib/flow/nat_session.c
docs/architecture_v2.mddocs/phase1_scope_v2.mddocs/phase4_offload_design.mddocs/repo_map_v2.mddocs/build_verified.md
docs/legacy_dpdk17_mode.mddocs/legacy_vs_modern.md
docs/plans/PLAN_INDEX.mddocs/plans/DPDK_*.pdfdocs/plans/DPDK_*.docx
建议后续只盯住三件事,不要再散:
MODE=dpdk编译- 真正绑网卡
- 真正跑一轮 RX/TX
- 验证 parser / NAT / rewrite 行为
route.confacl.confnat.conf
- 为后续多 worker 做准备
当前仓库已经从“工程骨架”升级为:
一个以现代 DPDK 为目标、Phase 1 真实主路径已经接入、mock 模式可运行、真实 DPDK 模式待目标机验证的用户态数据面平台基线。