In the function virtqueue_enqueue_xmit(), when can_push == 1 is true, vtnet_hdr_size is added to pkt_len by calling rte_pktmbuf_prepend. So, virtio header len should be subtracted before calling stats function.
Fixes: 58169a9c8153 ("net/virtio: support Tx checksum offload") Signed-off-by: Zhiyong Yang <zhiyong.y...@intel.com> --- drivers/net/virtio/virtio_rxtx.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c index 609b4138a..bf14f9a99 100644 --- a/drivers/net/virtio/virtio_rxtx.c +++ b/drivers/net/virtio/virtio_rxtx.c @@ -1079,6 +1079,12 @@ virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) /* Enqueue Packet buffers */ virtqueue_enqueue_xmit(txvq, txm, slots, use_indirect, can_push); + /* In function virtqueue_enqueue_xmit(), when can_push == 1 + * is true, vtnet_hdr_size is added to pkt_len of mbuf. So, it + * should be subtracted before calling stats function. + */ + if (can_push == 1) + txm->pkt_len -= txvq->vq->hw->vtnet_hdr_size; txvq->stats.bytes += txm->pkt_len; virtio_update_packet_stats(&txvq->stats, txm); } -- 2.13.3