app/testpmd: fix valid ports prints

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>
This commit is contained in:
Matan Azrad 2018-05-03 10:31:43 +00:00 committed by Thomas Monjalon
parent b8b8b344cb
commit 8f3c4176fc
3 changed files with 18 additions and 31 deletions

View 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)
{

View 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];

View 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);