为什么DPDK只能收发60字节的包

Why DPDK only cannot send and receive 60 bytes packet

我写了一个简单的DPDK发送和接收应用程序。当数据包 len <= 60 字节时,发送和接收应用程序工作,但当数据包 len > 60 字节时,发送应用程序显示它已发送数据包。但在收到申请时,它没有收到任何东西。

在发送申请中:

mbuf_pool = rte_pktmbuf_pool_create("MBUF_POOL", NUM_MBUFS,
            MBUF_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
pkt = rte_pktmbuf_alloc(mbuf_pool);
pkt->data_len = packlen; //if packlen<=60, it works, but when packlen>60, receiver cannot receive anything. 

我尝试将 l2fwd 和 basicfwd 作为接收应用程序。这是相同的结果。

问题在这里:

pchar[12]=0;
pchar[13] = 0

这意味着以太网类型为 0。从分配的以太网类型列表中:

https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml

我们看到 0 表示零以太网帧长度。由于最小以太网帧长度为 64(60 + 4 FCS),这就是为什么您无法发送超过 60 字节的数据包。

要解决此问题,只需从上面的列表中添加一个合理的以太网类型即可。