Do not increase the count of received packets if classifier already handled the packet. Fixes odp_classifier example crashing with netmap pktio.
Signed-off-by: Matias Elo <[email protected]> --- platform/linux-generic/pktio/netmap.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c index 1042fd1..820629c 100644 --- a/platform/linux-generic/pktio/netmap.c +++ b/platform/linux-generic/pktio/netmap.c @@ -585,7 +585,7 @@ static int netmap_stop(pktio_entry_t *pktio_entry ODP_UNUSED) * @param len Netmap buffer length * @param ts Pointer to pktin timestamp * - * @retval 0 on success + * @retval Number of created packets * @retval <0 on failure */ static inline int netmap_pkt_to_odp(pktio_entry_t *pktio_entry, @@ -637,7 +637,7 @@ static inline int netmap_pkt_to_odp(pktio_entry_t *pktio_entry, *pkt_out = pkt; } - return 0; + return 1; } static inline int netmap_recv_desc(pktio_entry_t *pktio_entry, @@ -650,6 +650,7 @@ static inline int netmap_recv_desc(pktio_entry_t *pktio_entry, char *buf; uint32_t slot_id; int i; + int ret; int ring_id = desc->cur_rx_ring; int num_rx = 0; int num_rings = desc->last_rx_ring - desc->first_rx_ring + 1; @@ -674,10 +675,11 @@ static inline int netmap_recv_desc(pktio_entry_t *pktio_entry, odp_prefetch(buf); - if (!netmap_pkt_to_odp(pktio_entry, &pkt_table[num_rx], - buf, ring->slot[slot_id].len, - ts)) - num_rx++; + ret = netmap_pkt_to_odp(pktio_entry, &pkt_table[num_rx], + buf, ring->slot[slot_id].len, + ts); + if (ret > 0) + num_rx += ret; ring->cur = nm_ring_next(ring, slot_id); ring->head = ring->cur; -- 1.9.1 _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
