In case of error the 'pkt' should be released by the calling function. Currently loopback gives it back to the receiver and report it as success in the stats.
Signed-off-by: Zoltan Kiss <[email protected]> --- v2: handle release in caller instead, and adjust stats. platform/linux-generic/odp_classification.c | 10 +++------- platform/linux-generic/pktio/loop.c | 9 ++++++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/platform/linux-generic/odp_classification.c b/platform/linux-generic/odp_classification.c index 8522023..3a18a78 100644 --- a/platform/linux-generic/odp_classification.c +++ b/platform/linux-generic/odp_classification.c @@ -745,21 +745,17 @@ int _odp_packet_classifier(pktio_entry_t *entry, odp_packet_t pkt) if (cos == NULL) return -1; - if (cos->s.pool == NULL) { - odp_packet_free(pkt); + if (cos->s.pool == NULL) return -1; - } - if (cos->s.queue == NULL) { - odp_packet_free(pkt); + if (cos->s.queue == NULL) return -1; - } if (odp_packet_pool(pkt) != cos->s.pool->s.pool_hdl) { new_pkt = odp_packet_copy(pkt, cos->s.pool->s.pool_hdl); - odp_packet_free(pkt); if (new_pkt == ODP_PACKET_INVALID) return -1; + odp_packet_free(pkt); } else { new_pkt = pkt; } diff --git a/platform/linux-generic/pktio/loop.c b/platform/linux-generic/pktio/loop.c index 0ea6d0e..f6a8c1d 100644 --- a/platform/linux-generic/pktio/loop.c +++ b/platform/linux-generic/pktio/loop.c @@ -70,10 +70,13 @@ static int loopback_recv(pktio_entry_t *pktio_entry, odp_packet_t pkts[], pkt_hdr = odp_packet_hdr(pkt); packet_parse_reset(pkt_hdr); packet_parse_l2(pkt_hdr); - if (0 > _odp_packet_classifier(pktio_entry, pkt)) { - pkts[j++] = pkt; + if (!_odp_packet_classifier(pktio_entry, pkt)) { pktio_entry->s.stats.in_octets += - odp_packet_len(pkts[i]); + odp_packet_len(pkt); + } else { + pktio_entry->s.stats.in_errors += + odp_packet_len(pkt); + odp_packet_free(pkt); } } nbr = j; -- 1.9.1 _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
