Hi all,

 

I tried using the checksum offloads feature in DPDK and it did not see working under virtual machine.

 

Port only support TCP checksum and do not support IP checksum:

rx_offload_capa = DEV_RX_OFFLOAD_TCP_CKSUM

tx_offload_capa = DEV_TX_OFFLOAD_TCP_CKSUM

 

so I config rxmode.offload txmode.offloads as below:

rxmode.offloads = DEV_RX_OFFLOAD_TCP_CKSUM

txmode.offloads = DEV_TX_OFFLOAD_TCP_CKSUM

 

For TX, I set the following parameters, it works good.

mbuf->l2_len = sizeof(*ethhdr)

mbuf->l3_len = ip header len

mbuf-ol_flags = RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_TCP_CKSUM

 

 

For RX, It will execute the following code:

In drivers/net/virtio/virtio_rxtx.c  virtio_rx_offload function :

    if (hdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) {

        hdrlen = hdr_lens.l2_len + hdr_lens.l3_len + hdr_lens.l4_len;

        if (hdr->csum_start <= hdrlen && l4_supported) {

            m->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_NONE;

        } else {

 

m->ol_flags set to RTE_MBUF_F_RX_L4_CKSUM_NONE, causing the TCP RX checksum failed.

How do I avoid the above code going into this branch?

 

Thanks,

Jinag.