#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)
rte_free(names);
}
+static void
+show_security_context(uint16_t portid)
+{
+ void *p_ctx = rte_eth_dev_get_sec_ctx(portid);
+ const struct rte_security_capability *s_cap;
+
+ if (p_ctx == NULL)
+ return;
+
+ printf(" - crypto context\n");
+ printf("\t -- security context - %p\n", p_ctx);
+ printf("\t -- size %u\n",
+ rte_security_session_get_size(p_ctx));
+
+ s_cap = rte_security_capabilities_get(p_ctx);
+ if (s_cap) {
+ printf("\t -- action (0x%x), protocol (0x%x),"
+ " offload flags (0x%x)\n",
+ s_cap->action,
+ s_cap->protocol,
+ s_cap->ol_flags);
+ printf("\t -- capabilities - oper type %x\n",
+ s_cap->crypto_capabilities->op);
+ }
+}
+
static void
show_offloads(uint64_t offloads,
const char *(show_offload)(uint64_t))
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",
}
}
- printf(" - cyrpto context\n");
#ifdef RTE_LIB_SECURITY
- void *p_ctx = rte_eth_dev_get_sec_ctx(i);
- printf("\t -- security context - %p\n", p_ctx);
-
- if (p_ctx) {
- printf("\t -- size %u\n",
- rte_security_session_get_size(p_ctx));
- const struct rte_security_capability *s_cap =
- rte_security_capabilities_get(p_ctx);
- if (s_cap) {
- printf("\t -- action (0x%x), protocol (0x%x),"
- " offload flags (0x%x)\n",
- s_cap->action,
- s_cap->protocol,
- s_cap->ol_flags);
- printf("\t -- capabilities - oper type %x\n",
- s_cap->crypto_capabilities->op);
- }
- }
+ show_security_context(i);
#endif
}
}
printf("\t\t + AESNI: CPU (%c), HW (%c)\n",
(x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n',
(x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n');
- printf("\t\t + INLINE (%c)\n",
+ printf("\t\t + SECURITY OFFLOAD (%c)\n",
(x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n');
printf("\t\t + ARM: NEON (%c), CE (%c)\n",
(x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n',
printf(" - device (%u)\n", i);
printf("\t -- name (%s)\n"
- "\t -- driver (%s)\n"
- "\t -- id (%u) on socket (%d)\n"
- "\t -- queue pairs (%d)\n",
- rte_cryptodev_name_get(i),
- dev_info.driver_name,
- dev_info.driver_id,
- dev_info.device->numa_node,
- rte_cryptodev_queue_pair_count(i));
+ "\t -- driver (%s)\n"
+ "\t -- id (%u) on socket (%d)\n"
+ "\t -- queue pairs (%d)\n",
+ rte_cryptodev_name_get(i),
+ dev_info.driver_name,
+ dev_info.driver_id,
+ dev_info.device->numa_node,
+ rte_cryptodev_queue_pair_count(i));
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")"
- " error (%"PRIu64")\n",
- stats.enqueued_count,
- stats.enqueue_err_count);
+ " error (%"PRIu64")\n",
+ stats.enqueued_count,
+ stats.enqueue_err_count);
printf("\t\t + dequeue count (%"PRIu64")"
- " error (%"PRIu64")\n",
- stats.dequeued_count,
- stats.dequeue_err_count);
+ " error (%"PRIu64")\n",
+ stats.dequeued_count,
+ stats.dequeue_err_count);
}
+
+#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 */