【发布时间】:2016-08-02 16:52:13
【问题描述】:
我正在尝试了解 DPDK 的 basicfwd 示例的转发机制。谁能帮我初始化和编辑rte_mbuf 的有效负载? Here 是班级。
我打算用tcpdump和rte_pktmbuf_dump查看包内容。
这是rte_mbuf 我希望将自己的有效负载添加到:
struct rte_mbuf *bufs[BURST_SIZE];
这是收到的rte_mbuf:
const uint16_t nb_rx = rte_eth_rx_burst(port, 0, bufs, BURST_SIZE);
这是正在传输的rte_mbuf:
const uint16_t nb_tx = rte_eth_tx_burst(port ^ 1, 0,
bufs, nb_rx);
我已经修改了 DPDK 示例中的示例应用程序basicfwd.c 以在文件中打印转发的数据包:
/* Get burst of RX packets, from first port of pair. */
const uint16_t nb_rx = rte_eth_rx_burst(port, 0, bufs, BURST_SIZE);
FILE *fp;
fp = fopen("dump.txt", "a");
fprintf(fp, "\n-----------------------\n fprintf... %d<->%d\n", count, port);
rte_pktmbuf_dump(fp, bufs[0], 1000);
fclose(fp);
if (unlikely(nb_rx == 0))
continue;
/* Send burst of TX packets, to second port of pair. */
const uint16_t nb_tx = rte_eth_tx_burst(port ^ 1, 0,bufs, nb_rx);
这些是我在输出文件中看到的数据包:
我希望能够修改内容以便更好地理解。我试过rte_pktmbuf_init 和bufs->userdata =*(unsigned short*) 0xAAAAAAAA 但它对我不起作用。
【问题讨论】:
-
用户数据不是有效载荷,它是供用户使用的私有区域。 payload在mbuf->buf_addr,它指向真实数据包的第一个字节。