Thanks

-Matias

> -----Original Message-----
> From: lng-odp [mailto:[email protected]] On Behalf Of EXT Maxim
> Uvarov
> Sent: Thursday, February 25, 2016 1:48 PM
> To: [email protected]
> Subject: Re: [lng-odp] [API-NEXT PATCH] example: generator: retry tx if no 
> failure
> code is returned
> 
> 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
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to