On Thu, Aug 18, 2016 at 6:00 AM, Maxim Uvarov <[email protected]> wrote:
> Signed-off-by: Maxim Uvarov <[email protected]> > Reviewed-by: Bill Fischofer <[email protected]> > --- > example/l2fwd_simple/l2fwd_simple_run.sh | 6 ++--- > example/l2fwd_simple/odp_l2fwd_simple.c | 39 > +++++++++++++++++++++++++++++--- > 2 files changed, 39 insertions(+), 6 deletions(-) > > diff --git a/example/l2fwd_simple/l2fwd_simple_run.sh > b/example/l2fwd_simple/l2fwd_simple_run.sh > index 292d0e3..130a3a8 100755 > --- a/example/l2fwd_simple/l2fwd_simple_run.sh > +++ b/example/l2fwd_simple/l2fwd_simple_run.sh > @@ -12,12 +12,12 @@ echo "using PCAP_IN = ${PCAP_IN}" > ./odp_l2fwd_simple pcap:in=${PCAP_IN} pcap:out=pcapout.pcap > 02:00:00:00:00:01 02:00:00:00:00:02 & > > sleep 1 > -kill $! > +kill -s SIGINT $! > wait $! > STATUS=$? > > -if [ "$STATUS" -ne 143 ]; then > - echo "Error: status was: $STATUS, expected 143" > +if [ "$STATUS" -ne 0 ]; then > + echo "Error: status was: $STATUS, expected 0" > exit 1 > fi > > diff --git a/example/l2fwd_simple/odp_l2fwd_simple.c > b/example/l2fwd_simple/odp_l2fwd_simple.c > index 8a14e7d..0682d2d 100644 > --- a/example/l2fwd_simple/odp_l2fwd_simple.c > +++ b/example/l2fwd_simple/odp_l2fwd_simple.c > @@ -7,6 +7,7 @@ > #include <stdlib.h> > #include <stdio.h> > #include <getopt.h> > +#include <signal.h> > > #include <odp_api.h> > #include <odp/helper/linux.h> > @@ -18,6 +19,9 @@ > #define MAX_PKT_BURST 32 > #define MAX_WORKERS 1 > > +static int exit_thr; > +static int g_ret; > + > struct { > odp_pktio_t if0, if1; > odp_pktin_queue_t if0in, if1in; > @@ -25,6 +29,12 @@ struct { > odph_ethaddr_t src, dst; > } global; > > +static void sig_handler(int signo ODP_UNUSED) > +{ > + printf("sig_handler!\n"); > + exit_thr = 1; > +} > + > static odp_pktio_t create_pktio(const char *name, odp_pool_t pool, > odp_pktin_queue_t *pktin, > odp_pktout_queue_t *pktout) > @@ -74,6 +84,7 @@ static int run_worker(void *arg ODP_UNUSED) > { > odp_packet_t pkt_tbl[MAX_PKT_BURST]; > int pkts, sent, tx_drops, i; > + int total_pkts = 0; > > if (odp_pktio_start(global.if0)) { > printf("unable to start input interface\n"); > @@ -87,9 +98,9 @@ static int run_worker(void *arg ODP_UNUSED) > printf("started output interface\n"); > printf("started all\n"); > > - for (;;) { > + while (!exit_thr) { > pkts = odp_pktin_recv_tmo(global.if0in, pkt_tbl, > MAX_PKT_BURST, > - ODP_PKTIN_WAIT); > + ODP_PKTIN_NO_WAIT); > > if (odp_unlikely(pkts <= 0)) > continue; > @@ -108,10 +119,15 @@ static int run_worker(void *arg ODP_UNUSED) > sent = odp_pktout_send(global.if1out, pkt_tbl, pkts); > if (sent < 0) > sent = 0; > + total_pkts += sent; > tx_drops = pkts - sent; > if (odp_unlikely(tx_drops)) > odp_packet_free_multi(&pkt_tbl[sent], tx_drops); > } > + > + if (total_pkts < 10) > + g_ret = -1; > + > return 0; > } > > @@ -192,8 +208,25 @@ int main(int argc, char **argv) > thr_params.thr_type = ODP_THREAD_WORKER; > thr_params.instance = instance; > > + signal(SIGINT, sig_handler); > + > odph_odpthreads_create(thd, &cpumask, &thr_params); > odph_odpthreads_join(thd); > > - return 0; > + if (odp_pool_destroy(pool)) { > + printf("Error: pool destroy\n"); > + exit(EXIT_FAILURE); > + } > + > + if (odp_term_local()) { > + printf("Error: term local\n"); > + exit(EXIT_FAILURE); > + } > + > + if (odp_term_global(instance)) { > + printf("Error: term global\n"); > + exit(EXIT_FAILURE); > + } > + > + return g_ret; > } > -- > 2.7.1.250.gff4ea60 > >
