ethdev: use constants for link state
[dpdk.git] / app / test-pmd / testpmd.c
index 269ef81..1398c6c 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  *   BSD LICENSE
  *
- *   Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
  *   All rights reserved.
  *
  *   Redistribution and use in source and binary forms, with or without
@@ -608,6 +608,7 @@ init_fwd_streams(void)
        portid_t pid;
        struct rte_port *port;
        streamid_t sm_id, nb_fwd_streams_new;
+       queueid_t q;
 
        /* set socket id according to numa or not */
        FOREACH_PORT(pid, ports) {
@@ -643,7 +644,12 @@ init_fwd_streams(void)
                }
        }
 
-       nb_fwd_streams_new = (streamid_t)(nb_ports * nb_rxq);
+       q = RTE_MAX(nb_rxq, nb_txq);
+       if (q == 0) {
+               printf("Fail: Cannot allocate fwd streams as number of queues is 0\n");
+               return -1;
+       }
+       nb_fwd_streams_new = (streamid_t)(nb_ports * q);
        if (nb_fwd_streams_new == nb_fwd_streams)
                return 0;
        /* clear the old */
@@ -753,7 +759,7 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats)
                if (cur_fwd_eng == &csum_fwd_engine)
                        printf("  Bad-ipcsum: %-14"PRIu64" Bad-l4csum: %-14"PRIu64" \n",
                               port->rx_bad_ip_csum, port->rx_bad_l4_csum);
-               if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) {
+               if ((stats->ierrors + stats->rx_nombuf) > 0) {
                        printf("  RX-error: %-"PRIu64"\n",  stats->ierrors);
                        printf("  RX-nombufs: %-14"PRIu64"\n", stats->rx_nombuf);
                }
@@ -772,7 +778,7 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats)
                if (cur_fwd_eng == &csum_fwd_engine)
                        printf("  Bad-ipcsum:%14"PRIu64"    Bad-l4csum:%14"PRIu64"\n",
                               port->rx_bad_ip_csum, port->rx_bad_l4_csum);
-               if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) {
+               if ((stats->ierrors + stats->rx_nombuf) > 0) {
                        printf("  RX-error:%"PRIu64"\n", stats->ierrors);
                        printf("  RX-nombufs:             %14"PRIu64"\n",
                               stats->rx_nombuf);
@@ -955,6 +961,19 @@ start_packet_forwarding(int with_tx_first)
        portid_t   pt_id;
        streamid_t sm_id;
 
+       if (strcmp(cur_fwd_eng->fwd_mode_name, "rxonly") == 0 && !nb_rxq)
+               rte_exit(EXIT_FAILURE, "rxq are 0, cannot use rxonly fwd mode\n");
+
+       if (strcmp(cur_fwd_eng->fwd_mode_name, "txonly") == 0 && !nb_txq)
+               rte_exit(EXIT_FAILURE, "txq are 0, cannot use txonly fwd mode\n");
+
+       if ((strcmp(cur_fwd_eng->fwd_mode_name, "rxonly") != 0 &&
+               strcmp(cur_fwd_eng->fwd_mode_name, "txonly") != 0) &&
+               (!nb_rxq || !nb_txq))
+               rte_exit(EXIT_FAILURE,
+                       "Either rxq or txq are 0, cannot use %s fwd mode\n",
+                       cur_fwd_eng->fwd_mode_name);
+
        if (all_ports_started() == 0) {
                printf("Not all ports were started\n");
                return;
@@ -1622,7 +1641,7 @@ check_all_ports_link_status(uint32_t port_mask)
                                continue;
                        }
                        /* clear all_ports_up flag if any link down */
-                       if (link.link_status == 0) {
+                       if (link.link_status == ETH_LINK_DOWN) {
                                all_ports_up = 0;
                                break;
                        }
@@ -2037,7 +2056,10 @@ main(int argc, char** argv)
        if (argc > 1)
                launch_args_parse(argc, argv);
 
-       if (nb_rxq > nb_txq)
+       if (!nb_rxq && !nb_txq)
+               printf("Warning: Either rx or tx queues should be non-zero\n");
+
+       if (nb_rxq > 1 && nb_rxq > nb_txq)
                printf("Warning: nb_rxq=%d enables RSS configuration, "
                       "but nb_txq=%d will prevent to fully test it.\n",
                       nb_rxq, nb_txq);