【发布时间】:2020-07-01 10:16:34
【问题描述】:
我在 Centos 7 上运行 dpdk-stable-18.11.8。我的测试代码将带有简单有效负载字符串“Hello from dpdk”的 udp 数据包传输到远程主机。
在传输之前,mbuf 的转储如下所示:
dump mbuf at 0x53e4e92c0, iova=73e4e9340, buf_len=2176
pkt_len=57, ol_flags=c0000000000000, nb_segs=2, in_port=65535
segment at 0x53e4e92c0, data=0x53e4e9396, data_len=42
Dump data at [0x53e4e9396], len=42
00000000: 94 40 C9 1F C4 DB 94 40 C9 1E 13 7D 08 00 45 B8 | .@.....@...}..E.
00000010: 00 2B 00 00 00 00 40 11 F5 E8 C0 A8 01 69 C0 A8 | .+....@......i..
00000020: 01 68 0B B9 0B B8 00 17 64 2D | | | | | | | .h......d-
segment at 0x53e146e40, data=0x53e4fbbc0, data_len=15
Dump data at [0x53e4fbbc0], len=15
00000000: 48 65 6C 6C 6F 20 66 72 6F 6D 20 64 70 64 6B | | Hello from dpdk
使用命令运行 tcpdump:
tcpdump -A -nni eno2 src 192.168.1.105 -vv -X
在远程主机上产生:
10:44:33.022538 IP (tos 0xb8, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 43)
192.168.1.105.3001 > 192.168.1.104.3000: [udp sum ok] UDP, length 15
0x0000: 45b8 002b 0000 0000 4011 f5e8 c0a8 0169 E..+....@......i
0x0010: c0a8 0168 0bb9 0bb8 0017 642d 0000 0000 ...h......d-....
0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
所以 udp 数据包到达但有效载荷全为零。
(发送方为 192.168.1.105,接收方为 192.168.1.104)。
这是我的代码的 sn-p,它将 udp 和 ip 标头添加到发送器中的 mbuf 的空间:
p_udp_hdr = (struct udp_hdr*)rte_pktmbuf_prepend(ptMbuf, (uint16_t)sizeof(struct udp_hdr));
p_ip_hdr = (struct ipv4_hdr*)rte_pktmbuf_prepend(ptMbuf, (uint16_t)sizeof(struct ipv4_hdr));
我不知道去哪里找,因为代码改编自另一个项目的工作代码。可能相关的是,在另一个项目中,校验和是由 NIC 生成的,但在这个项目中,我已经在软件中计算了它们;但是 tcpdump 说校验和是正确的。
任何建议将不胜感激。
【问题讨论】:
-
嗨 @DavidA 要求您检查 dev_configure TX 卸载标志以了解多段行为。
标签: dpdk