#include <stdlib.h>
#include <getopt.h>
#include <unistd.h>
+#include <strings.h>
#include <rte_eal.h>
#include <rte_common.h>
STATS_BDR_FMT, s, w, STATS_BDR_FMT)
/**< mask of enabled ports */
-static uint32_t enabled_port_mask;
+static unsigned long enabled_port_mask;
/**< Enable stats. */
static uint32_t enable_stats;
/**< Enable xstats. */
parse_portmask(const char *portmask)
{
char *end = NULL;
- unsigned long pm;
errno = 0;
/* parse hexadecimal string */
- pm = strtoul(portmask, &end, 16);
- if ((portmask[0] == '\0') || (end == NULL) || (*end != '\0') ||
- (errno != 0)) {
- printf("%s ERROR parsing the port mask\n", __func__);
+ enabled_port_mask = strtoul(portmask, &end, 16);
+ if (portmask[0] == '\0' || end == NULL || *end != '\0' || errno != 0) {
+ fprintf(stderr, "Invalid portmask '%s'\n", portmask);
return -1;
}
- if (pm == 0)
- return -1;
-
- return pm;
-
+ return 0;
}
/*
switch (opt) {
/* portmask */
case 'p':
- enabled_port_mask = parse_portmask(optarg);
- if (enabled_port_mask == 0) {
- printf("invalid portmask\n");
+ if (parse_portmask(optarg) < 0) {
proc_info_usage(prgname);
return -1;
}
} else if (!strncmp(long_option[option_index].name,
"xstats-ids",
MAX_LONG_OPT_SZ)) {
- nb_xstats_ids = parse_xstats_ids(optarg,
+ int ret = parse_xstats_ids(optarg,
xstats_ids, MAX_NB_XSTATS_IDS);
-
- if (nb_xstats_ids <= 0) {
+ if (ret <= 0) {
printf("xstats-id list parse error.\n");
return -1;
}
-
+ nb_xstats_ids = ret;
}
break;
default:
} else if ((type_end != NULL) &&
(strncmp(cnt_name, "flow_", strlen("flow_"))) == 0) {
if (strncmp(type_end, "_filters", strlen("_filters")) == 0)
- strlcpy(cnt_type, "operations", cnt_type_len);
+ strlcpy(cnt_type, "filter_result", cnt_type_len);
else if (strncmp(type_end, "_errors", strlen("_errors")) == 0)
strlcpy(cnt_type, "errors", cnt_type_len);
- else if (strncmp(type_end, "_filters", strlen("_filters")) == 0)
- strlcpy(cnt_type, "filter_result", cnt_type_len);
} else if ((type_end != NULL) &&
(strncmp(cnt_name, "mac_", strlen("mac_"))) == 0) {
if (strncmp(type_end, "_errors", strlen("_errors")) == 0)
static void
show_port(void)
{
- uint16_t i = 0;
- int ret = 0, j, k;
+ int i, ret, j, k;
snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD ");
STATS_BDR_STR(10, bdr_str);
- RTE_ETH_FOREACH_DEV(i) {
+ for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
uint16_t mtu = 0;
struct rte_eth_link link;
struct rte_eth_dev_info dev_info;
char link_status_text[RTE_ETH_LINK_MAX_STR_LEN];
struct rte_eth_fc_conf fc_conf;
struct rte_ether_addr mac;
+ struct rte_eth_dev_owner owner;
+
+ /* Skip if port is not in mask */
+ if ((enabled_port_mask & (1ul << i)) == 0)
+ continue;
+
+ /* Skip if port is unused */
+ if (!rte_eth_dev_is_valid_port(i))
+ continue;
memset(&rss_conf, 0, sizeof(rss_conf));
dev_info.driver_name, dev_info.device->name,
rte_eth_dev_socket_id(i));
+ ret = rte_eth_dev_owner_get(i, &owner);
+ if (ret == 0 && owner.id != RTE_ETH_DEV_NO_OWNER)
+ printf("\t -- owner %#"PRIx64":%s\n",
+ owner.id, owner.name);
+
ret = rte_eth_link_get(i, &link);
if (ret < 0) {
printf("Link get failed (port %u): %s\n",
display_crypto_feature_info(dev_info.feature_flags);
- memset(&stats, 0, sizeof(0));
if (rte_cryptodev_stats_get(i, &stats) == 0) {
printf("\t -- stats\n");
printf("\t\t + enqueue count (%"PRIu64")"
stats.dequeue_err_count);
}
-#ifdef RTE_LIBRTE_SECURITY
+#ifdef RTE_LIB_SECURITY
show_security_context(i);
#endif
}
static void
show_mempool(char *name)
{
- uint64_t flags = 0;
-
snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL ");
STATS_BDR_STR(10, bdr_str);
struct rte_mempool *ptr = rte_mempool_lookup(name);
if (ptr != NULL) {
struct rte_mempool_ops *ops;
+ uint64_t flags = ptr->flags;
- flags = ptr->flags;
ops = rte_mempool_get_ops(ptr->ops_index);
printf(" - Name: %s on socket %d\n"
" - flags:\n"
if (nb_ports == 0)
rte_exit(EXIT_FAILURE, "No Ethernet ports - bye\n");
- /* If no port mask was specified*/
- if (enabled_port_mask == 0)
- enabled_port_mask = 0xffff;
+ /* If no port mask was specified, then show non-owned ports */
+ if (enabled_port_mask == 0) {
+ RTE_ETH_FOREACH_DEV(i)
+ enabled_port_mask = 1ul << i;
+ }
+
+ for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
+
+ /* Skip if port is not in mask */
+ if ((enabled_port_mask & (1ul << i)) == 0)
+ continue;
+
+ /* Skip if port is unused */
+ if (!rte_eth_dev_is_valid_port(i))
+ continue;
+
+ if (enable_stats)
+ nic_stats_display(i);
+ else if (enable_xstats)
+ nic_xstats_display(i);
+ else if (reset_stats)
+ nic_stats_clear(i);
+ else if (reset_xstats)
+ nic_xstats_clear(i);
+ else if (enable_xstats_name)
+ nic_xstats_by_name_display(i, xstats_name);
+ else if (nb_xstats_ids > 0)
+ nic_xstats_by_ids_display(i, xstats_ids,
+ nb_xstats_ids);
+ else if (enable_metrics)
+ metrics_display(i);
- RTE_ETH_FOREACH_DEV(i) {
- if (enabled_port_mask & (1 << i)) {
- if (enable_stats)
- nic_stats_display(i);
- else if (enable_xstats)
- nic_xstats_display(i);
- else if (reset_stats)
- nic_stats_clear(i);
- else if (reset_xstats)
- nic_xstats_clear(i);
- else if (enable_xstats_name)
- nic_xstats_by_name_display(i, xstats_name);
- else if (nb_xstats_ids > 0)
- nic_xstats_by_ids_display(i, xstats_ids,
- nb_xstats_ids);
- else if (enable_metrics)
- metrics_display(i);
- }
}
/* print port independent stats */