Merged,
Maxim.

On 08/19/16 17:27, Bill Fischofer wrote:


On Thu, Aug 18, 2016 at 6:00 AM, Maxim Uvarov <[email protected] <mailto:[email protected]>> wrote:

    Signed-off-by: Maxim Uvarov <[email protected]
    <mailto:[email protected]>>


Reviewed-by: Bill Fischofer <[email protected] <mailto:[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



Reply via email to