如何使用 mbuf 构造 IP 有效负载数据包?

How can I construct IP payload packet with mbuf?

我的要求是使用 DPDK Mbuf 创建 Ethernet-IP-Payload。 DPDK 应用程序在虚拟机上 运行,数据包生成函数调用 API(附在第二张图片中)。我通过 DPDK 接口发送数据包并在我的主机系统 (W10) 上捕获。

Wireshark,不能理解以太网协议IP.Is有什么问题吗?

enter image description here

enter image description here

您可以在 DPDK 代码中纠正一些问题。

  1. 网络数据包是 big-endian,我假设你是 运行 x86 上的访客 OS。如果这是真的,请确保更正字节顺序。
  2. DPDK API rte_pktmbuf_mtod 让你开始数据包。请先填写以太网 header,然后移动 14 个字节即 struct rte_eth_hdr 类型转换为 IP 并填写数据。
  3. 在 IP 字段中,校验和字段设置为 0。如果您在 port_init 中启用 IP-CHECKSUM 卸载,请 cross-check。
  4. IP 中的所有字段也必须遵循 BIG endian 格式。
  5. mbuf中也有一个端口归档。对于 rte_mbuf_alloc 它将是 0,但是对于发送到另一个端口它应该是正确的值。

Wireshark 观察结果

  1. 字节 13 和 14 是 0xa50。这看起来您的预期负载已被覆盖
  2. 字节 1 是 0x45,这清楚地表明,您首先写入 IP header 内容而不是以太网。请使用 DPDK 修复中的步骤 2