On 2/6/2024 1:10 AM, Jie Hai wrote:
> From: Dengdui Huang <[email protected]>
>
> When KEEP_CRC offload is enabled, some packets will be truncated and
> the CRC is still be stripped in following cases:
> 1. For HIP08 hardware, the packet type is TCP and the length
> is less than or equal to 60B.
> 2. For other hardwares, the packet type is IP and the length
> is less than or equal to 60B.
>
If a device doesn't support the offload by some packets, it can be
option to disable offload for that device, instead of calculating it in
software and append it.
Unless you have a specific usecase, or requirement to support the offload.
<...>
> @@ -2492,10 +2544,16 @@ hns3_recv_pkts_simple(void *rx_queue,
> goto pkt_err;
>
> rxm->packet_type = hns3_rx_calc_ptype(rxq, l234_info, ol_info);
> -
> if (rxm->packet_type == RTE_PTYPE_L2_ETHER_TIMESYNC)
> rxm->ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP;
>
> + if (unlikely(rxq->crc_len > 0)) {
> + if (hns3_need_recalculate_crc(rxq, rxm))
> + hns3_recalculate_crc(rxq, rxm);
> + rxm->pkt_len -= rxq->crc_len;
> + rxm->data_len -= rxq->crc_len;
>
Removing 'crc_len' from 'mbuf->pkt_len' & 'mbuf->data_len' is
practically same as stripping CRC.
We don't count CRC length in the statistics, but it should be accessible
in the payload by the user.