app/testpmd: check stopping port is not forwarding
[dpdk.git] / app / test-pmd / testpmd.c
index 9d11830..f22d1b6 100644 (file)
@@ -49,6 +49,7 @@
 #include <inttypes.h>
 
 #include <rte_common.h>
+#include <rte_errno.h>
 #include <rte_byteorder.h>
 #include <rte_log.h>
 #include <rte_debug.h>
@@ -415,6 +416,10 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
        mb_size = sizeof(struct rte_mbuf) + mbuf_seg_size;
        mbuf_poolname_build(socket_id, pool_name, sizeof(pool_name));
 
+       RTE_LOG(INFO, USER1,
+               "create a new mbuf pool <%s>: n=%u, size=%u, socket=%u\n",
+               pool_name, nb_mbuf, mbuf_seg_size, socket_id);
+
 #ifdef RTE_LIBRTE_PMD_XENVIRT
        rte_mp = rte_mempool_gntalloc_create(pool_name, nb_mbuf, mb_size,
                (unsigned) mb_mempool_cache,
@@ -446,8 +451,9 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
        }
 
        if (rte_mp == NULL) {
-               rte_exit(EXIT_FAILURE, "Creation of mbuf pool for socket %u "
-                                               "failed\n", socket_id);
+               rte_exit(EXIT_FAILURE,
+                       "Creation of mbuf pool for socket %u failed: %s\n",
+                       socket_id, rte_strerror(rte_errno));
        } else if (verbose_level > 0) {
                rte_mempool_dump(stdout, rte_mp);
        }
@@ -1273,11 +1279,6 @@ start_port(portid_t pid)
        struct rte_port *port;
        struct ether_addr mac_addr;
 
-       if (test_done == 0) {
-               printf("Please stop forwarding first\n");
-               return -1;
-       }
-
        if (port_id_is_invalid(pid, ENABLED_WARN))
                return 0;
 
@@ -1429,10 +1430,6 @@ stop_port(portid_t pid)
        struct rte_port *port;
        int need_check_link_status = 0;
 
-       if (test_done == 0) {
-               printf("Please stop forwarding first\n");
-               return;
-       }
        if (dcb_test) {
                dcb_test = 0;
                dcb_config = 0;
@@ -1447,6 +1444,11 @@ stop_port(portid_t pid)
                if (pid != pi && pid != (portid_t)RTE_PORT_ALL)
                        continue;
 
+               if (port_is_forwarding(pi) != 0 && test_done == 0) {
+                       printf("Please remove port %d from forwarding configuration.\n", pi);
+                       continue;
+               }
+
                port = &ports[pi];
                if (rte_atomic16_cmpset(&(port->port_status), RTE_PORT_STARTED,
                                                RTE_PORT_HANDLING) == 0)
@@ -1471,11 +1473,6 @@ close_port(portid_t pid)
        portid_t pi;
        struct rte_port *port;
 
-       if (test_done == 0) {
-               printf("Please stop forwarding first\n");
-               return;
-       }
-
        if (port_id_is_invalid(pid, ENABLED_WARN))
                return;
 
@@ -1485,6 +1482,11 @@ close_port(portid_t pid)
                if (pid != pi && pid != (portid_t)RTE_PORT_ALL)
                        continue;
 
+               if (port_is_forwarding(pi) != 0 && test_done == 0) {
+                       printf("Please remove port %d from forwarding configuration.\n", pi);
+                       continue;
+               }
+
                port = &ports[pi];
                if (rte_atomic16_cmpset(&(port->port_status),
                        RTE_PORT_CLOSED, RTE_PORT_CLOSED) == 1) {
@@ -1502,7 +1504,7 @@ close_port(portid_t pid)
 
                if (rte_atomic16_cmpset(&(port->port_status),
                        RTE_PORT_HANDLING, RTE_PORT_CLOSED) == 0)
-                       printf("Port %d can not be set into stopped\n", pi);
+                       printf("Port %d cannot be set to closed\n", pi);
        }
 
        printf("Done\n");
@@ -1511,7 +1513,7 @@ close_port(portid_t pid)
 void
 attach_port(char *identifier)
 {
-       portid_t i, j, pi = 0;
+       portid_t pi = 0;
 
        printf("Attaching a new port...\n");
 
@@ -1520,11 +1522,6 @@ attach_port(char *identifier)
                return;
        }
 
-       if (test_done == 0) {
-               printf("Please stop forwarding first\n");
-               return;
-       }
-
        if (rte_eth_dev_attach(identifier, &pi))
                return;
 
@@ -1534,16 +1531,6 @@ attach_port(char *identifier)
 
        nb_ports = rte_eth_dev_count();
 
-       /* set_default_fwd_ports_config(); */
-       memset(fwd_ports_ids, 0, sizeof(fwd_ports_ids));
-       i = 0;
-       FOREACH_PORT(j, ports) {
-               fwd_ports_ids[i] = j;
-               i++;
-       }
-       nb_cfg_ports = nb_ports;
-       nb_fwd_ports++;
-
        ports[pi].port_status = RTE_PORT_STOPPED;
 
        printf("Port %d is attached. Now total ports is %d\n", pi, nb_ports);
@@ -1553,7 +1540,6 @@ attach_port(char *identifier)
 void
 detach_port(uint8_t port_id)
 {
-       portid_t i, pi = 0;
        char name[RTE_ETH_NAME_MAX_LEN];
 
        printf("Detaching a port...\n");
@@ -1569,16 +1555,6 @@ detach_port(uint8_t port_id)
        ports[port_id].enabled = 0;
        nb_ports = rte_eth_dev_count();
 
-       /* set_default_fwd_ports_config(); */
-       memset(fwd_ports_ids, 0, sizeof(fwd_ports_ids));
-       i = 0;
-       FOREACH_PORT(pi, ports) {
-               fwd_ports_ids[i] = pi;
-               i++;
-       }
-       nb_cfg_ports = nb_ports;
-       nb_fwd_ports--;
-
        printf("Port '%s' is detached. Now total ports is %d\n",
                        name, nb_ports);
        printf("Done\n");