From: Matias Elo <matias....@nokia.com>

Receive packets from all pktin queues. Improves backward
compatibility.

Signed-off-by: Matias Elo <matias....@nokia.com>
---
 platform/linux-generic/include/odp_packet_netmap.h |  1 +
 platform/linux-generic/pktio/netmap.c              | 22 +++++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/platform/linux-generic/include/odp_packet_netmap.h 
b/platform/linux-generic/include/odp_packet_netmap.h
index bede176..88661aa 100644
--- a/platform/linux-generic/include/odp_packet_netmap.h
+++ b/platform/linux-generic/include/odp_packet_netmap.h
@@ -46,6 +46,7 @@ typedef struct {
        odp_pktio_capability_t  capa;   /**< interface capabilities */
        unsigned num_rx_queues;         /**< number of pktin queues */
        unsigned num_tx_queues;         /**< number of pktout queues */
+       unsigned cur_rx_queue;          /**< current pktin queue */
        uint32_t num_rx_rings;          /**< number of nm rx rings */
        uint32_t num_tx_rings;          /**< number of nm tx rings */
        odp_bool_t lockless_rx;         /**< no locking for rx */
diff --git a/platform/linux-generic/pktio/netmap.c 
b/platform/linux-generic/pktio/netmap.c
index 97d0382..29474c1 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -577,7 +577,27 @@ static int netmap_recv_queue(pktio_entry_t *pktio_entry, 
int index,
 static int netmap_recv(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[],
                       unsigned num)
 {
-       return netmap_recv_queue(pktio_entry, 0, pkt_table, num);
+       unsigned i;
+       unsigned num_rx = 0;
+       unsigned queue_id = pktio_entry->s.pkt_nm.cur_rx_queue;
+       unsigned num_queues = pktio_entry->s.pkt_nm.num_rx_queues;
+       unsigned pkts_left = num;
+       odp_packet_t *pkt_table_cur = pkt_table;
+
+       for (i = 0; i < num_queues && num_rx != num; i++) {
+               if (queue_id >= num_queues)
+                       queue_id = 0;
+
+               pkt_table_cur = &pkt_table[num_rx];
+               pkts_left = num - num_rx;
+
+               num_rx +=  netmap_recv_queue(pktio_entry, queue_id,
+                                            pkt_table_cur, pkts_left);
+               queue_id++;
+       }
+       pktio_entry->s.pkt_nm.cur_rx_queue = queue_id;
+
+       return num_rx;
 }
 
 static int netmap_send_queue(pktio_entry_t *pktio_entry, int index,
-- 
2.6.3

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to