为什么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 字节的数据包。
要解决此问题,只需从上面的列表中添加一个合理的以太网类型即可。
我写了一个简单的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 字节的数据包。
要解决此问题,只需从上面的列表中添加一个合理的以太网类型即可。