app/testpmd: fix valid ports prints
authorMatan Azrad <matan@mellanox.com>
Thu, 3 May 2018 10:31:43 +0000 (10:31 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 14 May 2018 02:02:48 +0000 (04:02 +0200)
There are several cases of an invalid port data access that causes the
printing of all the valid ports, for example, when the user asks to
receive a port information of an invalid port.

Wrongly, the port with id 0 is printed in all the above described
cases, regardless of its validity.

Print port 0 only if it is valid as done for the rest of the ports.

Fixes: af75078fece3 ("first public release")
Fixes: b6ea6408fbc7 ("ethdev: store numa_node per device")
Fixes: edab33b1c01d ("app/testpmd: support port hotplug")
Cc: stable@dpdk.org
Signed-off-by: Matan Azrad <matan@mellanox.com>
app/test-pmd/config.c
app/test-pmd/parameters.c
app/test-pmd/testpmd.h

index bcaf429..b07376a 100644 (file)
@@ -121,15 +121,11 @@ nic_stats_display(portid_t port_id)
        struct rte_eth_stats stats;
        struct rte_port *port = &ports[port_id];
        uint8_t i;
-       portid_t pid;
 
        static const char *nic_stats_border = "########################";
 
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
-               printf("Valid port range is [0");
-               RTE_ETH_FOREACH_DEV(pid)
-                       printf(", %d", pid);
-               printf("]\n");
+               print_valid_ports();
                return;
        }
        rte_eth_stats_get(port_id, &stats);
@@ -203,13 +199,8 @@ nic_stats_display(portid_t port_id)
 void
 nic_stats_clear(portid_t port_id)
 {
-       portid_t pid;
-
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
-               printf("Valid port range is [0");
-               RTE_ETH_FOREACH_DEV(pid)
-                       printf(", %d", pid);
-               printf("]\n");
+               print_valid_ports();
                return;
        }
        rte_eth_stats_reset(port_id);
@@ -286,15 +277,11 @@ nic_stats_mapping_display(portid_t port_id)
 {
        struct rte_port *port = &ports[port_id];
        uint16_t i;
-       portid_t pid;
 
        static const char *nic_stats_mapping_border = "########################";
 
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
-               printf("Valid port range is [0");
-               RTE_ETH_FOREACH_DEV(pid)
-                       printf(", %d", pid);
-               printf("]\n");
+               print_valid_ports();
                return;
        }
 
@@ -405,15 +392,11 @@ port_infos_display(portid_t port_id)
        int vlan_offload;
        struct rte_mempool * mp;
        static const char *info_border = "*********************";
-       portid_t pid;
        uint16_t mtu;
        char name[RTE_ETH_NAME_MAX_LEN];
 
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
-               printf("Valid port range is [0");
-               RTE_ETH_FOREACH_DEV(pid)
-                       printf(", %d", pid);
-               printf("]\n");
+               print_valid_ports();
                return;
        }
        port = &ports[port_id];
@@ -774,6 +757,17 @@ port_id_is_invalid(portid_t port_id, enum print_warning warning)
        return 1;
 }
 
+void print_valid_ports(void)
+{
+       portid_t pid;
+
+       printf("The valid ports array is [");
+       RTE_ETH_FOREACH_DEV(pid) {
+               printf(" %d", pid);
+       }
+       printf(" ]\n");
+}
+
 static int
 vlan_id_is_invalid(uint16_t vlan_id)
 {
index 6489bf4..7580762 100644 (file)
@@ -377,7 +377,6 @@ parse_portnuma_config(const char *q_arg)
        };
        unsigned long int_fld[_NUM_FLD];
        char *str_fld[_NUM_FLD];
-       portid_t pid;
 
        /* reset from value set at definition */
        while ((p = strchr(p0,'(')) != NULL) {
@@ -401,10 +400,7 @@ parse_portnuma_config(const char *q_arg)
                port_id = (portid_t)int_fld[FLD_PORT];
                if (port_id_is_invalid(port_id, ENABLED_WARN) ||
                        port_id == (portid_t)RTE_PORT_ALL) {
-                       printf("Valid port range is [0");
-                       RTE_ETH_FOREACH_DEV(pid)
-                               printf(", %d", pid);
-                       printf("]\n");
+                       print_valid_ports();
                        return -1;
                }
                socket_id = (uint8_t)int_fld[FLD_SOCKET];
@@ -435,7 +431,6 @@ parse_ringnuma_config(const char *q_arg)
        };
        unsigned long int_fld[_NUM_FLD];
        char *str_fld[_NUM_FLD];
-       portid_t pid;
        #define RX_RING_ONLY 0x1
        #define TX_RING_ONLY 0x2
        #define RXTX_RING    0x3
@@ -462,10 +457,7 @@ parse_ringnuma_config(const char *q_arg)
                port_id = (portid_t)int_fld[FLD_PORT];
                if (port_id_is_invalid(port_id, ENABLED_WARN) ||
                        port_id == (portid_t)RTE_PORT_ALL) {
-                       printf("Valid port range is [0");
-                       RTE_ETH_FOREACH_DEV(pid)
-                               printf(", %d", pid);
-                       printf("]\n");
+                       print_valid_ports();
                        return -1;
                }
                socket_id = (uint8_t)int_fld[FLD_SOCKET];
index f7bc58e..e6f9514 100644 (file)
@@ -726,6 +726,7 @@ enum print_warning {
        DISABLED_WARN
 };
 int port_id_is_invalid(portid_t port_id, enum print_warning warning);
+void print_valid_ports(void);
 int new_socket_id(unsigned int socket_id);
 
 queueid_t get_allowed_max_nb_rxq(portid_t *pid);