From: Matias Elo <matias....@nokia.com> odp_pktio_stats_t.out_octets was updated incorrectly if all packets were not successfully enqueued.
Signed-off-by: Matias Elo <matias....@nokia.com> --- /** Email created from pull request 397 (matiaselo:dev/pktio_fixes) ** https://github.com/Linaro/odp/pull/397 ** Patch: https://github.com/Linaro/odp/pull/397.patch ** Base sha: 520c170d758f2d37554631bf1467ec50e027cd3e ** Merge commit sha: 926e7716387610a8be67fbc051845450640f8df6 **/ platform/linux-generic/pktio/loop.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/linux-generic/pktio/loop.c b/platform/linux-generic/pktio/loop.c index ad2cb39f8..784fa798f 100644 --- a/platform/linux-generic/pktio/loop.c +++ b/platform/linux-generic/pktio/loop.c @@ -177,6 +177,7 @@ static int loopback_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, int i; int ret; uint32_t bytes = 0; + uint32_t out_octets_tbl[len]; if (odp_unlikely(len > QUEUE_MULTI_MAX)) len = QUEUE_MULTI_MAX; @@ -184,6 +185,7 @@ static int loopback_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, for (i = 0; i < len; ++i) { hdr_tbl[i] = packet_to_buf_hdr(pkt_tbl[i]); bytes += odp_packet_len(pkt_tbl[i]); + out_octets_tbl[i] = bytes; } for (i = 0; i < len; ++i) { @@ -206,7 +208,7 @@ static int loopback_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, if (ret > 0) { pktio_entry->s.stats.out_ucast_pkts += ret; - pktio_entry->s.stats.out_octets += bytes; + pktio_entry->s.stats.out_octets += out_octets_tbl[ret - 1]; } else { ODP_DBG("queue enqueue failed %i\n", ret); ret = -1;