不可以。struct rte_mbuf
中的 total_len
表示整个缓冲区中有效数据的长度,包括所有分片的数据,因此在使用 DPDK 发送报文时,需要正确设置这个值。如果您多次赋予不同的值,则可能会导致发送的报文大小错误,并且可能会造成网络传输问题。
在填充报文时,您应该先计算出数据长度并将其存储到 data_len
字段中,然后再将 total_len
设置为整个缓冲区(或分片链)中数据的总长度。
例如,在填充随机数据时,可以使用以下代码:
// 填充随机数据
uint8_t *pkt_data = rte_pktmbuf_mtod(pkt_buf, uint8_t *);
for (int j = 0; j < pkt_len; j++) {
pkt_data[j] = rand() % 256;
}
pkt_buf->data_len = pkt_len;
pkt_buf->pkt_len = pkt_len;
在上面的代码中,我们首先使用 rte_pktmbuf_mtod()
函数获取缓冲区中可写入数据的指针。然后我们用一个循环来填充随机数据,并将实际数据长度存储到 data_len
字段中。最后,我们将 pkt_len
赋给 pkt_buf->pkt_len
和 pkt_buf->total_len
字段,以表示整个缓冲区(或分片链)中有效数据的总长度。
请注意,在使用 rte_pktmbuf_alloc()
分配缓冲区时,DPDK 会自动为您设置 pkt_len
和 data_len
字段的默认值(即与分配的缓冲区大小相同)。因此,在填充数据之前,您需要先根据实际数据长度调整这两个字段。