如何使用 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 代码中纠正一些问题。
- 网络数据包是 big-endian,我假设你是 运行 x86 上的访客 OS。如果这是真的,请确保更正字节顺序。
- DPDK API rte_pktmbuf_mtod 让你开始数据包。请先填写以太网 header,然后移动 14 个字节即
struct rte_eth_hdr
类型转换为 IP 并填写数据。
- 在 IP 字段中,校验和字段设置为 0。如果您在 port_init 中启用 IP-CHECKSUM 卸载,请 cross-check。
- IP 中的所有字段也必须遵循 BIG endian 格式。
- mbuf中也有一个端口归档。对于 rte_mbuf_alloc 它将是 0,但是对于发送到另一个端口它应该是正确的值。
Wireshark 观察结果
- 字节 13 和 14 是
0xa50
。这看起来您的预期负载已被覆盖
- 字节 1 是
0x45
,这清楚地表明,您首先写入 IP header 内容而不是以太网。请使用 DPDK 修复中的步骤 2
。
我的要求是使用 DPDK Mbuf 创建 Ethernet-IP-Payload。 DPDK 应用程序在虚拟机上 运行,数据包生成函数调用 API(附在第二张图片中)。我通过 DPDK 接口发送数据包并在我的主机系统 (W10) 上捕获。
Wireshark,不能理解以太网协议IP.Is有什么问题吗?
enter image description here
enter image description here
您可以在 DPDK 代码中纠正一些问题。
- 网络数据包是 big-endian,我假设你是 运行 x86 上的访客 OS。如果这是真的,请确保更正字节顺序。
- DPDK API rte_pktmbuf_mtod 让你开始数据包。请先填写以太网 header,然后移动 14 个字节即
struct rte_eth_hdr
类型转换为 IP 并填写数据。 - 在 IP 字段中,校验和字段设置为 0。如果您在 port_init 中启用 IP-CHECKSUM 卸载,请 cross-check。
- IP 中的所有字段也必须遵循 BIG endian 格式。
- mbuf中也有一个端口归档。对于 rte_mbuf_alloc 它将是 0,但是对于发送到另一个端口它应该是正确的值。
Wireshark 观察结果
- 字节 13 和 14 是
0xa50
。这看起来您的预期负载已被覆盖 - 字节 1 是
0x45
,这清楚地表明,您首先写入 IP header 内容而不是以太网。请使用 DPDK 修复中的步骤2
。