Reviewed, tested and merged :)

Maxim.

On 02/24/16 16:47, Matias Elo wrote:
If odp_pktout_send() doesn't return an error code (ret == 0)
try to resend after a small delay. This enables running
odp_l2fwd_run validation test with netmap enabled.

Signed-off-by: Matias Elo <[email protected]>
---
  example/generator/odp_generator.c | 16 ++++++++++++++--
  1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/example/generator/odp_generator.c 
b/example/generator/odp_generator.c
index c06a319..40e34f3 100644
--- a/example/generator/odp_generator.c
+++ b/example/generator/odp_generator.c
@@ -71,6 +71,7 @@ static struct {
        odp_atomic_u64_t udp;   /**< udp packets */
        odp_atomic_u64_t icmp;  /**< icmp packets */
        odp_atomic_u64_t cnt;   /**< sent packets*/
+       odp_atomic_u64_t tx_drops; /**< packets dropped in transmit */
  } counters;
/** * Thread specific arguments
@@ -351,6 +352,7 @@ static odp_pktio_t create_pktio(const char *dev, odp_pool_t 
pool)
  static void *gen_send_thread(void *arg)
  {
        int thr;
+       int ret;
        odp_pktio_t pktio;
        thread_args_t *thr_args;
        odp_pktout_queue_t pktout;
@@ -390,7 +392,15 @@ static void *gen_send_thread(void *arg)
                        return NULL;
                }
- if (odp_pktout_send(pktout, &pkt, 1) < 1) {
+               for (;;) {
+                       ret = odp_pktout_send(pktout, &pkt, 1);
+                       if (ret == 1) {
+                               break;
+                       } else if (ret == 0) {
+                               odp_atomic_add_u64(&counters.tx_drops, 1);
+                               odp_time_wait_ns(ODP_TIME_MSEC_IN_NS);
+                               continue;
+                       }
                        EXAMPLE_ERR("  [%02i] packet send failed\n", thr);
                        odp_packet_free(pkt);
                        return NULL;
@@ -586,7 +596,8 @@ static void print_global_stats(int num_workers)
                }
pkts = odp_atomic_load_u64(&counters.seq);
-               printf(" total sent: %" PRIu64 "\n", pkts);
+               printf(" total sent: %" PRIu64 ", drops: %" PRIu64 "\n", pkts,
+                      odp_atomic_load_u64(&counters.tx_drops));
if (args->appl.mode == APPL_MODE_UDP) {
                        pps = (pkts - pkts_prev) / verbose_interval;
@@ -633,6 +644,7 @@ int main(int argc, char *argv[])
        odp_atomic_init_u64(&counters.udp, 0);
        odp_atomic_init_u64(&counters.icmp, 0);
        odp_atomic_init_u64(&counters.cnt, 0);
+       odp_atomic_init_u64(&counters.tx_drops, 0);
/* Reserve memory for args from shared mem */
        shm = odp_shm_reserve("shm_args", sizeof(args_t),

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to