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;

Reply via email to