dev.dpdk.org archive mirror
 help / color / mirror / Atom feed
From: Ivan Dyukov <i.dyukov@samsung.com>
To: dev@dpdk.org, i.dyukov@samsung.com, v.kuramshin@samsung.com,
	thomas@monjalon.net, david.marchand@redhat.com,
	ferruh.yigit@intel.com, arybchenko@solarflare.com,
	wei.zhao1@intel.com, jia.guo@intel.com, beilei.xing@intel.com,
	qiming.yang@intel.com, wenzhuo.lu@intel.com,
	mb@smartsharesystems.com, stephen@networkplumber.org,
	nicolas.chautru@intel.com, bruce.richardson@intel.com,
	konstantin.ananyev@intel.com, cristian.dumitrescu@intel.com,
	radu.nicolau@intel.com, akhil.goyal@nxp.com,
	declan.doherty@intel.com, skori@marvell.com,
	pbhagavatula@marvell.com, jerinj@marvell.com,
	kirankumark@marvell.com, david.hunt@intel.com,
	anatoly.burakov@intel.com, xiaoyun.li@intel.com,
	jingjing.wu@intel.com, john.mcnamara@intel.com,
	jasvinder.singh@intel.com, byron.marohn@intel.com,
	yipeng1.wang@intel.com
Subject: [dpdk-dev] [PATCH v7 02/25] ethdev: add a link status text representation
Date: Fri, 10 Jul 2020 10:02:00 +0300	[thread overview]
Message-ID: <20200710070226.6045-3-i.dyukov@samsung.com> (raw)
In-Reply-To: <20200710070226.6045-1-i.dyukov@samsung.com>

This commit add function which treat link status structure
and format it to text representation.

Signed-off-by: Ivan Dyukov <i.dyukov@samsung.com>
---
 MAINTAINERS                              |   1 +
 app/test/Makefile                        |   3 +
 app/test/meson.build                     |   2 +
 app/test/test_ethdev_link.c              | 299 +++++++++++++++++++++++
 lib/librte_ethdev/rte_ethdev.c           | 174 +++++++++++++
 lib/librte_ethdev/rte_ethdev.h           |  54 ++++
 lib/librte_ethdev/rte_ethdev_version.map |   4 +
 7 files changed, 537 insertions(+)
 create mode 100644 app/test/test_ethdev_link.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 5e706cd7e..f4fb31ea2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -393,6 +393,7 @@ T: git://dpdk.org/next/dpdk-next-net
 F: lib/librte_ethdev/
 F: devtools/test-null.sh
 F: doc/guides/prog_guide/switch_representation.rst
+F: app/test/test_ethdev*
 
 Flow API
 M: Ori Kam <orika@mellanox.com>
diff --git a/app/test/Makefile b/app/test/Makefile
index e5440774b..9f43b8c3c 100644
--- a/app/test/Makefile
+++ b/app/test/Makefile
@@ -251,6 +251,9 @@ SRCS-$(CONFIG_RTE_LIBRTE_SECURITY) += test_security.c
 
 SRCS-$(CONFIG_RTE_LIBRTE_IPSEC) += test_ipsec.c test_ipsec_perf.c
 SRCS-$(CONFIG_RTE_LIBRTE_IPSEC) += test_ipsec_sad.c
+
+SRCS-$(CONFIG_RTE_LIBRTE_ETHER) += test_ethdev_link.c
+
 ifeq ($(CONFIG_RTE_LIBRTE_IPSEC),y)
 LDLIBS += -lrte_ipsec
 endif
diff --git a/app/test/meson.build b/app/test/meson.build
index 56591db4e..1e6acf701 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -39,6 +39,7 @@ test_sources = files('commands.c',
 	'test_efd.c',
 	'test_efd_perf.c',
 	'test_errno.c',
+	'test_ethdev_link.c',
 	'test_event_crypto_adapter.c',
 	'test_event_eth_rx_adapter.c',
 	'test_event_ring.c',
@@ -199,6 +200,7 @@ fast_tests = [
         ['eal_flags_misc_autotest', false],
         ['eal_fs_autotest', true],
         ['errno_autotest', true],
+        ['ethdev_link_status', true],
         ['event_ring_autotest', true],
         ['fib_autotest', true],
         ['fib6_autotest', true],
diff --git a/app/test/test_ethdev_link.c b/app/test/test_ethdev_link.c
new file mode 100644
index 000000000..8a2f133c0
--- /dev/null
+++ b/app/test/test_ethdev_link.c
@@ -0,0 +1,299 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
+ */
+
+#include <rte_log.h>
+#include <rte_ethdev.h>
+
+#include <rte_test.h>
+#include "test.h"
+
+
+static int32_t
+test_link_status_up_default(void)
+{
+	int ret = 0;
+	struct rte_eth_link link_status = {
+		.link_speed = ETH_SPEED_NUM_2_5G,
+		.link_status = ETH_LINK_UP,
+		.link_autoneg = ETH_LINK_AUTONEG,
+		.link_duplex = ETH_LINK_FULL_DUPLEX
+	};
+	char text[128];
+	ret = rte_eth_link_strf(text, 128, NULL, &link_status);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
+	printf("Default link up #1: %s\n", text);
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at 2.5 Gbit/s FDX Autoneg\n",
+		text, strlen(text), "Invalid default link status string");
+
+	link_status.link_duplex = ETH_LINK_HALF_DUPLEX;
+	link_status.link_autoneg = ETH_LINK_FIXED;
+	link_status.link_speed = ETH_SPEED_NUM_10M,
+	ret = rte_eth_link_strf(text, 128, NULL, &link_status);
+	printf("Default link up #2: %s\n", text);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at 10 Mbit/s HDX Fixed\n",
+		text, strlen(text), "Invalid default link status "
+		"string with HDX");
+
+	link_status.link_speed = ETH_SPEED_NUM_UNKNOWN,
+	ret = rte_eth_link_strf(text, 128, NULL, &link_status);
+	printf("Default link up #3: %s\n", text);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at Unknown speed HDX Fixed\n",
+		text, strlen(text), "Invalid default link status "
+		"string with HDX");
+	return TEST_SUCCESS;
+}
+
+static int32_t
+test_link_status_down_default(void)
+{
+	int ret = 0;
+	struct rte_eth_link link_status = {
+		.link_speed = ETH_SPEED_NUM_2_5G,
+		.link_status = ETH_LINK_DOWN,
+		.link_autoneg = ETH_LINK_AUTONEG,
+		.link_duplex = ETH_LINK_FULL_DUPLEX
+	};
+	char text[128];
+	ret = rte_eth_link_strf(text, 128, NULL, &link_status);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("Link down\n",
+		text, strlen(text), "Invalid default link status string");
+
+	return TEST_SUCCESS;
+}
+
+static int32_t
+test_link_status_string_overflow(void)
+{
+	int ret = 0;
+	struct rte_eth_link link_status = {
+		.link_speed = ETH_SPEED_NUM_2_5G,
+		.link_status = ETH_LINK_UP,
+		.link_autoneg = ETH_LINK_AUTONEG,
+		.link_duplex = ETH_LINK_FULL_DUPLEX
+	};
+	char text[128];
+	int i = 0;
+	for (i = 0; i < 128; i++)
+		text[i] = 'Y';
+	text[127] = '\0';
+
+	ret = rte_eth_link_strf(NULL, 2, "status %S, %G Gbits/s",
+		&link_status);
+	RTE_TEST_ASSERT(ret < 0, "Format string should fail, but it's ok\n");
+
+	ret = rte_eth_link_strf(text, 2, "status %S, %G Gbits/s",
+		&link_status);
+	RTE_TEST_ASSERT(ret < 0, "Format string should fail, but it's ok\n");
+	RTE_TEST_ASSERT(text[2] == 'Y', "String1 overflow\n");
+
+	ret = rte_eth_link_strf(text, 8, NULL,
+		&link_status);
+	RTE_TEST_ASSERT(ret < 0, "Default format string should fail,"
+			" but it's ok\n");
+	RTE_TEST_ASSERT(text[8] == 'Y', "String1 overflow\n");
+
+	ret = rte_eth_link_strf(text, 10, NULL,
+		&link_status);
+	RTE_TEST_ASSERT(ret < 0, "Default format string should fail,"
+			" but it's ok\n");
+	RTE_TEST_ASSERT(text[10] == 'Y', "String1 overflow\n");
+
+	text[1] = 'Y';
+	ret = rte_eth_link_strf(text, 1, "%S",
+		&link_status);
+	RTE_TEST_ASSERT(ret < 0, "Status string should fail, but it's ok\n");
+	RTE_TEST_ASSERT(text[1] == 'Y', "String1 overflow\n");
+
+	text[1] = 'Y';
+	ret = rte_eth_link_strf(text, 1, "%s",
+		&link_status);
+	RTE_TEST_ASSERT(ret < 0, "Status string should fail, but it's ok\n");
+	RTE_TEST_ASSERT(text[1] == 'Y', "String1 overflow\n");
+
+
+	return TEST_SUCCESS;
+}
+
+static int32_t
+test_link_status_format(void)
+{
+	int ret = 0;
+	struct rte_eth_link link_status = {
+		.link_speed = ETH_SPEED_NUM_40G,
+		.link_status = ETH_LINK_UP,
+		.link_autoneg = ETH_LINK_AUTONEG,
+		.link_duplex = ETH_LINK_FULL_DUPLEX
+	};
+	char text[128];
+	int i = 0;
+	for (i = 0; i < 128; i++)
+		text[i] = 'Y';
+	text[127] = '\0';
+	printf("status format #1: %s\n", text);
+	ret = rte_eth_link_strf(text, 128, "status = %S, duplex = %D\n",
+		&link_status);
+	printf("status format #2: %s\n", text);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format string\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("status = Up, duplex = FDX\n",
+		text, strlen(text), "Invalid status string1.");
+
+	ret = rte_eth_link_strf(text, 128, "%A", &link_status);
+	printf("status format #3: %s\n", text);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format string\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("Autoneg",
+		text, strlen(text), "Invalid status string2.");
+
+	ret = rte_eth_link_strf(text, 128,
+		"%G",
+		&link_status);
+	printf("status format #4: %s\n", text);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format string\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("40.0",
+		text, strlen(text), "Invalid status string3.");
+
+	ret = rte_eth_link_strf(text, 128,
+		"%d %M %",
+		&link_status);
+	printf("status format #5: %s\n", text);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format string\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("%d 40000 %",
+		text, strlen(text), "Invalid status string4.");
+	return TEST_SUCCESS;
+}
+
+static int32_t
+test_link_status_return_value(void)
+{
+	int ret = 0;
+	struct rte_eth_link link_status = {
+		.link_speed = ETH_SPEED_NUM_40G,
+		.link_status = ETH_LINK_UP,
+		.link_autoneg = ETH_LINK_AUTONEG,
+		.link_duplex = ETH_LINK_FULL_DUPLEX
+	};
+	char text[128];
+	int i = 0;
+	for (i = 0; i < 128; i++)
+		text[i] = 'Y';
+	text[127] = '\0';
+	ret = rte_eth_link_strf(text, 128, "status = %S, ",
+		&link_status);
+	printf("return value #1:ret=%u, text=%s\n", ret, text);
+	ret += rte_eth_link_strf(text + ret, 128 - ret,
+		"%A",
+		&link_status);
+	printf("return value #2:ret=%u, text=%s\n", ret, text);
+	ret += rte_eth_link_strf(text + ret, 128 - ret,
+		", duplex = %D\n",
+		&link_status);
+	printf("return value #3:ret=%u, text=%s\n", ret, text);
+	ret += rte_eth_link_strf(text + ret, 128 - ret,
+		"%M Mbits/s\n",
+		&link_status);
+	printf("return value #4:ret=%u, text=%s\n", ret, text);
+	RTE_TEST_ASSERT(ret > 0, "Failed to format string\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("status = Up, Autoneg, duplex = FDX\n"
+		"40000 Mbits/s\n",
+		text, strlen(text), "Invalid status string");
+
+	return TEST_SUCCESS;
+}
+
+static int32_t
+test_link_status_unknown_specifier(void)
+{
+	int ret = 0;
+	struct rte_eth_link link_status = {
+		.link_speed = ETH_SPEED_NUM_40G,
+		.link_status = ETH_LINK_UP,
+		.link_autoneg = ETH_LINK_AUTONEG,
+		.link_duplex = ETH_LINK_FULL_DUPLEX
+	};
+	char text[128];
+	ret = rte_eth_link_strf(text, 128, "status = %",
+		&link_status);
+	RTE_TEST_ASSERT(ret > 0, "Status string1 is failed\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("status = %",
+		text, strlen(text), "Invalid status string1");
+
+	ret = rte_eth_link_strf(text, 128,
+		", duplex = %d\n",
+		&link_status);
+	RTE_TEST_ASSERT(ret > 0, "Status string2 is failed\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(", duplex = %d\n",
+		text, strlen(text), "Invalid status string2");
+
+	ret = rte_eth_link_strf(text, 128,
+		"% Mbits/s\n",
+		&link_status);
+	RTE_TEST_ASSERT(ret > 0, "Status string3 is failed\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("% Mbits/s\n",
+		text, strlen(text), "Invalid status string3");
+
+	ret = rte_eth_link_strf(text, 128,
+		"%w Mbits/s\n",
+		&link_status);
+	RTE_TEST_ASSERT(ret > 0, "Status string4 should be ok, but it's fail\n");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL("%w Mbits/s\n",
+		text, strlen(text), "Invalid status string4");
+	return TEST_SUCCESS;
+}
+
+static int32_t
+test_link_status_format_edges(void)
+{
+	int ret = 0;
+	struct rte_eth_link link_status = {
+		.link_speed = ETH_SPEED_NUM_UNKNOWN,
+		.link_status = ETH_LINK_DOWN,
+		.link_autoneg = ETH_LINK_AUTONEG,
+		.link_duplex = ETH_LINK_HALF_DUPLEX
+	};
+	char text[128];
+	ret = rte_eth_link_strf(text, 4, "%S", &link_status);
+	printf("format edges #1: %s\n", text);
+	RTE_TEST_ASSERT(ret < 0, "It should fail. No space for "
+				 "zero terminator\n");
+	ret = rte_eth_link_strf(text, 6, "123%D", &link_status);
+	printf("format edges #2: %s\n", text);
+	RTE_TEST_ASSERT(ret < 0, "It should fail. No space for "
+				 "zero terminator\n");
+	ret = rte_eth_link_strf(text, 7, "%A", &link_status);
+	printf("format edges #3: %s\n", text);
+	RTE_TEST_ASSERT(ret < 0, "It should fail. No space for "
+				 "zero terminator\n");
+	ret = rte_eth_link_strf(text, 8, "%A", &link_status);
+	printf("format edges #4: %s\n", text);
+	RTE_TEST_ASSERT(ret > 0, "It should ok, but it fails\n");
+	return TEST_SUCCESS;
+}
+static struct unit_test_suite link_status_testsuite = {
+	.suite_name = "link status formatting",
+	.setup = NULL,
+	.teardown = NULL,
+	.unit_test_cases = {
+		TEST_CASE(test_link_status_up_default),
+		TEST_CASE(test_link_status_down_default),
+		TEST_CASE(test_link_status_string_overflow),
+		TEST_CASE(test_link_status_format),
+		TEST_CASE(test_link_status_format_edges),
+		TEST_CASE(test_link_status_unknown_specifier),
+		TEST_CASE(test_link_status_return_value),
+		TEST_CASES_END() /**< NULL terminate unit test array */
+	}
+};
+
+static int
+test_link_status(void)
+{
+	rte_log_set_global_level(RTE_LOG_DEBUG);
+	rte_log_set_level(RTE_LOGTYPE_EAL, RTE_LOG_DEBUG);
+
+	return unit_test_suite_runner(&link_status_testsuite);
+}
+
+REGISTER_TEST_COMMAND(ethdev_link_status, test_link_status);
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index d06b7f9b1..38332b1e4 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -2383,6 +2383,180 @@ rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *eth_link)
 	return 0;
 }
 
+static int
+rte_eth_link_strf_parser(char *str, size_t len, const char *const fmt,
+			   const struct rte_eth_link *link)
+{
+	size_t offset = 0;
+	const char *fmt_cur = fmt;
+	char *str_cur = str;
+	double gbits = (double)link->link_speed / 1000.;
+	static const char autoneg_str[]       = "Autoneg";
+	static const char fixed_str[]         = "Fixed";
+	static const char fdx_str[]           = "FDX";
+	static const char hdx_str[]           = "HDX";
+	static const char unknown_str[]       = "Unknown";
+	static const char up_str[]            = "Up";
+	static const char down_str[]          = "Down";
+	char gbits_str[20];
+	char mbits_str[20];
+
+	/* preformat complex formatting to easily concatinate it further */
+	snprintf(mbits_str, sizeof(mbits_str), "%u", link->link_speed);
+	snprintf(gbits_str, sizeof(gbits_str), "%.1f", gbits);
+	/* init str before formatting */
+	str[0] = 0;
+	while (*fmt_cur) {
+		/* check str bounds */
+		if (offset > (len - 1)) {
+			str[len - 1] = '\0';
+			return -1;
+		}
+		if (*fmt_cur == '%') {
+			/* set null terminator to current position,
+			 * it's required for strlcat
+			 */
+			*str_cur = '\0';
+			switch (*++fmt_cur) {
+			/* Speed in Mbits/s */
+			case 'M':
+				if (link->link_speed ==
+				    ETH_SPEED_NUM_UNKNOWN)
+					offset = strlcat(str, unknown_str,
+							 len);
+				else
+					offset = strlcat(str, mbits_str, len);
+				break;
+			/* Speed in Gbits/s */
+			case 'G':
+				if (link->link_speed ==
+				    ETH_SPEED_NUM_UNKNOWN)
+					offset = strlcat(str, unknown_str,
+							 len);
+				else
+					offset = strlcat(str, gbits_str, len);
+				break;
+			/* Link status */
+			case 'S':
+				offset = strlcat(str, link->link_status ?
+					up_str : down_str, len);
+				break;
+			/* Link autoneg */
+			case 'A':
+				offset = strlcat(str, link->link_autoneg ?
+					autoneg_str : fixed_str, len);
+				break;
+			/* Link duplex */
+			case 'D':
+				offset = strlcat(str, link->link_duplex ?
+					fdx_str : hdx_str, len);
+				break;
+			/* ignore unknown specifier */
+			default:
+				*str_cur = '%';
+				offset++;
+				fmt_cur--;
+				break;
+
+			}
+			if (offset > (len - 1))
+				return -1;
+
+			str_cur = str + offset;
+		} else {
+			*str_cur++ = *fmt_cur;
+			offset++;
+		}
+		fmt_cur++;
+	}
+	*str_cur = '\0';
+	return offset;
+}
+
+int
+rte_eth_link_printf(const char *const fmt,
+		    const struct rte_eth_link *link)
+{
+	char text[200];
+	int ret;
+
+	ret = rte_eth_link_strf(text, 200, fmt, link);
+	if (ret > 0)
+		printf("%s", text);
+	return ret;
+}
+
+int
+rte_eth_link_strf(char *str, size_t len, const char *const fmt,
+		    const struct rte_eth_link *link)
+{
+	size_t offset = 0;
+	double gbits = (double)link->link_speed / 1000.;
+	char speed_gbits_str[20];
+	char speed_mbits_str[20];
+	/* TBD: make it international? */
+	static const char link_down_str[]     = "Link down\n";
+	static const char link_up_str[]       = "Link up at ";
+	static const char unknown_speed_str[] = "Unknown speed ";
+	static const char mbits_str[]	      = "Mbit/s";
+	static const char gbits_str[]	      = "Gbit/s";
+	static const char fdx_str[]           = "FDX ";
+	static const char hdx_str[]           = "HDX ";
+	/* autoneg is latest param in default string, so add '\n' */
+	static const char autoneg_str[]       = "Autoneg\n";
+	static const char fixed_str[]         = "Fixed\n";
+	if (str == NULL || len == 0)
+		return -1;
+	/* default format string, if no fmt is specified */
+	if (fmt == NULL) {
+		if (link->link_status == ETH_LINK_DOWN) {
+			if (sizeof(link_down_str) > len)
+				return -1;
+			return strlcpy(str, link_down_str, len);
+		}
+
+		/* preformat complex strings to easily concatinate it further */
+		snprintf(speed_mbits_str, 20, "%u %s ", link->link_speed,
+			 mbits_str);
+		snprintf(speed_gbits_str, 20, "%.1f %s ", gbits, gbits_str);
+
+		offset = strlcpy(str, link_up_str, len);
+		/* reserve one byte to null terminator */
+		if (offset > (len - 1))
+			return -1;
+		/* link speed */
+		if (link->link_speed == ETH_SPEED_NUM_UNKNOWN) {
+			offset = strlcat(str, unknown_speed_str, len);
+			if (offset > (len - 1))
+				return -1;
+		} else {
+			if (link->link_speed < ETH_SPEED_NUM_1G) {
+				offset = strlcat(str, speed_mbits_str, len);
+				if (offset > (len - 1))
+					return -1;
+			} else {
+				offset = strlcat(str, speed_gbits_str, len);
+				if (offset > (len - 1))
+					return -1;
+			}
+		}
+		/* link duplex */
+		offset = strlcat(str, link->link_duplex ?
+			       fdx_str : hdx_str, len);
+		if (offset > (len - 1))
+			return -1;
+		/* link autonegotiation */
+		offset = strlcat(str, link->link_autoneg ?
+			       autoneg_str : fixed_str, len);
+		if (offset > (len - 1))
+			return -1;
+	/* Formatted status */
+	} else
+		offset = rte_eth_link_strf_parser(str, len, fmt, link);
+
+	return offset;
+}
+
 int
 rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)
 {
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index 2090af501..9afb566b3 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -2295,6 +2295,60 @@ int rte_eth_link_get(uint16_t port_id, struct rte_eth_link *link);
  */
 int rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *link);
 
+
+/**
+ * print formatted link status to stdout. This function threats all
+ * special values like ETH_SPEED_NUM_UNKNOWN, ETH_LINK_DOWN etc. and convert
+ * them to textual representation.
+ *
+ * @param fmt
+ *   Format string which allow to format link status. If NULL is provided
+ *   , default formatting will be applied.
+ *   Following specifiers are available:
+ *    - '%M' link speed in Mbits/s
+ *    - '%G' link speed in Gbits/s
+ *    - '%S' link status. e.g. Up or Down
+ *    - '%A' link autonegotiation state
+ *    - '%D' link duplex state
+ * @param link
+ *   Link status provided by rte_eth_link_get function
+ * @return
+ *   - Number of bytes written to stdout. In case of error, -1 is returned.
+ *
+ */
+__rte_experimental
+int rte_eth_link_printf(const char *const fmt,
+			const struct rte_eth_link *link);
+
+/**
+ * Format link status to textual representation. This function threats all
+ * special values like ETH_SPEED_NUM_UNKNOWN, ETH_LINK_DOWN etc. and convert
+ * them to textual representation.
+ *
+ * @param str
+ *   A pointer to a string to be filled with textual representation of
+ *   device status.
+ * @param len
+ *   Length of available memory at 'str' string.
+ * @param fmt
+ *   Format string which allow to format link status. If NULL is provided
+ *   , default formatting will be applied.
+ *   Following specifiers are available:
+ *    - '%M' link speed in Mbits/s
+ *    - '%G' link speed in Gbits/s
+ *    - '%S' link status. e.g. Up or Down
+ *    - '%A' link autonegotiation state
+ *    - '%D' link duplex state
+ * @param link
+ *   Link status provided by rte_eth_link_get function
+ * @return
+ *   - Number of bytes written to str array. In case of error, -1 is returned.
+ *
+ */
+__rte_experimental
+int rte_eth_link_strf(char *str, size_t len, const char *const fmt,
+			const struct rte_eth_link *eth_link);
+
 /**
  * Retrieve the general I/O statistics of an Ethernet device.
  *
diff --git a/lib/librte_ethdev/rte_ethdev_version.map b/lib/librte_ethdev/rte_ethdev_version.map
index 715505604..6c80597d1 100644
--- a/lib/librte_ethdev/rte_ethdev_version.map
+++ b/lib/librte_ethdev/rte_ethdev_version.map
@@ -241,4 +241,8 @@ EXPERIMENTAL {
 	__rte_ethdev_trace_rx_burst;
 	__rte_ethdev_trace_tx_burst;
 	rte_flow_get_aged_flows;
+
+	# added in 20.08
+	rte_eth_link_strf;
+	rte_eth_link_printf;
 };
-- 
2.17.1


  parent reply	other threads:[~2020-07-10  7:02 UTC|newest]

Thread overview: 359+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20191212085020eucas1p1be6d915a6610edf182d2ab0294c2a903@eucas1p1.samsung.com>
2019-12-12  8:50 ` [dpdk-dev] [PATCH] net/virtio: add link speed tuning Ivan Dyukov
2020-03-29 14:42   ` [dpdk-dev] [PATCH v7 0/5] net/virtio: add link speed devarg Ivan Dyukov
2020-03-29 14:42     ` [dpdk-dev] [PATCH v7 1/5] net/virtio: refactor devargs parsing Ivan Dyukov
2020-03-29 14:42     ` [dpdk-dev] [PATCH v7 2/5] net/virtio: add link speed devarg Ivan Dyukov
2020-03-29 14:42     ` [dpdk-dev] [PATCH v7 3/5] net/virtio-user: fix devargs parsing Ivan Dyukov
2020-03-29 14:42     ` [dpdk-dev] [PATCH v7 4/5] net/virtio-user: adding link speed devarg Ivan Dyukov
2020-03-29 14:42     ` [dpdk-dev] [PATCH v7 5/5] net/virtio: Support of VIRTIO_NET_F_SPEED_DUPLEX Ivan Dyukov
2020-03-30  7:57   ` [dpdk-dev] [PATCH v8 0/5] net/virtio: add link speed devarg Ivan Dyukov
2020-03-30  7:57     ` [dpdk-dev] [PATCH v8 1/5] net/virtio: refactor devargs parsing Ivan Dyukov
2020-03-30  7:57     ` [dpdk-dev] [PATCH v8 2/5] net/virtio: add link speed devarg Ivan Dyukov
2020-04-01 10:57       ` Thomas Monjalon
2020-04-02  9:18         ` Ivan Dyukov
2020-04-02 17:33           ` Thomas Monjalon
2020-04-02 20:29             ` Ivan Dyukov
2020-03-30  7:58     ` [dpdk-dev] [PATCH v8 3/5] net/virtio-user: fix devargs parsing Ivan Dyukov
2020-03-30  7:58     ` [dpdk-dev] [PATCH v8 4/5] net/virtio-user: adding link speed devarg Ivan Dyukov
2020-03-30  7:58     ` [dpdk-dev] [PATCH v8 5/5] net/virtio: Support of VIRTIO_NET_F_SPEED_DUPLEX Ivan Dyukov
2020-04-17 17:12     ` [dpdk-dev] [PATCH v8 0/5] net/virtio: add link speed devarg Maxime Coquelin
2020-04-06  8:57   ` [dpdk-dev] [PATCH v9 " Ivan Dyukov
2020-04-06  8:57     ` [dpdk-dev] [PATCH v9 1/5] net/virtio: refactor devargs parsing Ivan Dyukov
2020-04-15 14:53       ` Maxime Coquelin
2020-04-06  8:58     ` [dpdk-dev] [PATCH v9 2/5] net/virtio: add link speed devarg Ivan Dyukov
2020-04-15 15:06       ` Maxime Coquelin
2020-04-06  8:58     ` [dpdk-dev] [PATCH v9 3/5] net/virtio-user: fix devargs parsing Ivan Dyukov
2020-04-15 15:09       ` Maxime Coquelin
2020-04-06  8:58     ` [dpdk-dev] [PATCH v9 4/5] net/virtio-user: adding link speed devarg Ivan Dyukov
2020-04-15 15:10       ` Maxime Coquelin
2020-04-06  8:58     ` [dpdk-dev] [PATCH v9 5/5] net/virtio: Support of VIRTIO_NET_F_SPEED_DUPLEX Ivan Dyukov
2020-04-15 15:17       ` Maxime Coquelin
2020-04-15 20:03   ` [dpdk-dev] [PATCH v10 0/6] net/virtio: add link speed devarg Ivan Dyukov
2020-04-15 20:03     ` [dpdk-dev] [PATCH v10 1/6] net/virtio: replace default virtio speed Ivan Dyukov
2020-04-15 20:03     ` [dpdk-dev] [PATCH v10 2/6] net/virtio: refactor devargs parsing Ivan Dyukov
2020-04-15 20:03     ` [dpdk-dev] [PATCH v10 3/6] net/virtio: add link speed devarg Ivan Dyukov
2020-04-15 20:03     ` [dpdk-dev] [PATCH v10 4/6] net/virtio-user: fix devargs parsing Ivan Dyukov
2020-04-15 20:03     ` [dpdk-dev] [PATCH v10 5/6] net/virtio-user: adding link speed devarg Ivan Dyukov
2020-04-15 20:03     ` [dpdk-dev] [PATCH v10 6/6] net/virtio: Support of VIRTIO_NET_F_SPEED_DUPLEX Ivan Dyukov
2020-04-16  5:53   ` [dpdk-dev] [PATCH v11 0/6] net/virtio: add link speed devarg Ivan Dyukov
2020-04-16  5:53     ` [dpdk-dev] [PATCH v11 1/6] net/virtio: replace default virtio speed Ivan Dyukov
2020-04-16 11:44       ` Maxime Coquelin
2020-04-16 11:55       ` Morten Brørup
2020-04-16 11:58         ` Maxime Coquelin
2020-04-16 12:20           ` Ivan Dyukov
2020-04-16  5:53     ` [dpdk-dev] [PATCH v11 2/6] net/virtio: refactor devargs parsing Ivan Dyukov
2020-04-16  5:53     ` [dpdk-dev] [PATCH v11 3/6] net/virtio: add link speed devarg Ivan Dyukov
2020-04-16  5:53     ` [dpdk-dev] [PATCH v11 4/6] net/virtio-user: fix devargs parsing Ivan Dyukov
2020-04-16  5:53     ` [dpdk-dev] [PATCH v11 5/6] net/virtio-user: adding link speed devarg Ivan Dyukov
2020-04-16  5:53     ` [dpdk-dev] [PATCH v11 6/6] net/virtio: Support of VIRTIO_NET_F_SPEED_DUPLEX Ivan Dyukov
     [not found]   ` <CGME20200416124311eucas1p160468089b68c1d23578d4c3e6b3d0d75@eucas1p1.samsung.com>
     [not found]     ` <20200416124258.15549-1-i.dyukov@samsung.com>
2020-04-16 12:42       ` [dpdk-dev] [PATCH v12 1/7] ethdev: added UNKNOWN speed value Ivan Dyukov
2020-04-16 22:14         ` Thomas Monjalon
2020-04-17  6:40           ` Ivan Dyukov
2020-04-17 15:14             ` Maxime Coquelin
2020-04-17 15:44               ` Ferruh Yigit
2020-04-17 15:54                 ` Maxime Coquelin
2020-04-17 17:23                   ` Thomas Monjalon
2020-04-27  9:57                     ` [dpdk-dev] [PATCH v1 0/6] ethdev: allow unknown link speed Ivan Dyukov
2020-04-27  9:57                       ` [dpdk-dev] [PATCH v1 1/6] " Ivan Dyukov
2020-05-01 13:10                         ` Andrew Rybchenko
2020-04-27  9:57                       ` [dpdk-dev] [PATCH v1 2/6] app/procinfo: fix printf format specifier for uint Ivan Dyukov
2020-04-27  9:57                       ` [dpdk-dev] [PATCH v1 3/6] ethdev: remove extra 'new line' in output Ivan Dyukov
2020-05-01 13:15                         ` Andrew Rybchenko
2020-05-07 10:28                           ` Thomas Monjalon
2020-05-07 15:15                             ` Ivan Dyukov
2020-05-07 18:26                             ` [dpdk-dev] [PATCH v1 1/3] " Ivan Dyukov
2020-05-07 18:26                               ` [dpdk-dev] [PATCH v1 2/3] examples: " Ivan Dyukov
2020-05-07 18:26                               ` [dpdk-dev] [PATCH v1 3/3] " Ivan Dyukov
2020-05-12  2:08                               ` [dpdk-dev] [PATCH v1 1/3] ethdev: " Thomas Monjalon
2020-04-27  9:57                       ` [dpdk-dev] [PATCH v1 4/6] app/testpmd: remove extra type conversions Ivan Dyukov
2020-04-27  9:57                       ` [dpdk-dev] [PATCH v1 5/6] doc: update sample app with unknown speed Ivan Dyukov
2020-05-01 13:28                         ` Andrew Rybchenko
2020-05-02 19:35                           ` Ivan Dyukov
2020-05-03 13:57                             ` Andrew Rybchenko
2020-05-04  1:16                               ` Varghese, Vipin
2020-05-04 15:46                               ` Ivan Dyukov
2020-05-04 15:54                                 ` Andrew Rybchenko
2020-05-04 18:31                                   ` Ivan Dyukov
2020-05-06 17:40                               ` Ferruh Yigit
2020-04-27  9:57                       ` [dpdk-dev] [PATCH v1 6/6] ethdev: UNKNOWN link speed print format Ivan Dyukov
2020-05-06 17:42                       ` [dpdk-dev] [PATCH v1 0/6] ethdev: allow unknown link speed Ferruh Yigit
2020-05-07  8:53                         ` Ivan Dyukov
2020-05-07 10:31                           ` Thomas Monjalon
2020-05-07 13:55                             ` Ivan Dyukov
2020-05-07 14:08                               ` Ferruh Yigit
2020-05-26 19:10                       ` [dpdk-dev] [PATCH v2 0/7] " Ivan Dyukov
2020-05-26 19:10                         ` [dpdk-dev] [PATCH v2 1/7] " Ivan Dyukov
2020-05-26 19:10                         ` [dpdk-dev] [PATCH v2 2/7] ethdev: add a link status text representation Ivan Dyukov
2020-05-27  7:45                           ` [dpdk-dev] [PATCH v2 2/7] ethdev: add a link status textrepresentation Morten Brørup
2020-05-27 14:53                             ` Stephen Hemminger
2020-06-05 11:45                             ` Ferruh Yigit
2020-06-08  7:22                               ` Morten Brørup
2020-05-26 19:10                         ` [dpdk-dev] [PATCH v2 3/7] app: UNKNOWN link speed print format Ivan Dyukov
2020-05-26 19:10                         ` [dpdk-dev] [PATCH v2 4/7] doc: update sample app with unknown speed Ivan Dyukov
2020-05-26 19:10                         ` [dpdk-dev] [PATCH v2 5/7] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-05-26 19:10                         ` [dpdk-dev] [PATCH v2 6/7] net/i40e: " Ivan Dyukov
2020-05-26 19:10                         ` [dpdk-dev] [PATCH v2 7/7] net/ice: " Ivan Dyukov
2020-06-15  9:01                       ` [dpdk-dev] [PATCH v3 0/7] ethdev: allow unknown link speed Ivan Dyukov
2020-06-15  9:01                         ` [dpdk-dev] [PATCH v3 1/7] " Ivan Dyukov
2020-06-17 16:45                           ` Ferruh Yigit
2020-06-15  9:01                         ` [dpdk-dev] [PATCH v3 2/7] ethdev: add a link status text representation Ivan Dyukov
2020-06-17 16:45                           ` Ferruh Yigit
2020-06-18 10:08                             ` Ivan Dyukov
2020-06-18 12:03                               ` Ferruh Yigit
2020-06-18 12:32                                 ` [dpdk-dev] [PATCH v3 2/7] ethdev: add a link status textrepresentation Morten Brørup
2020-06-22  7:05                                   ` Ferruh Yigit
2020-06-22  7:43                                     ` Morten Brørup
2020-06-15  9:01                         ` [dpdk-dev] [PATCH v3 3/7] app: UNKNOWN link speed print format Ivan Dyukov
2020-06-17 16:49                           ` Ferruh Yigit
2020-06-15  9:01                         ` [dpdk-dev] [PATCH v3 4/7] doc: update sample app with unknown speed Ivan Dyukov
2020-06-17 16:50                           ` Ferruh Yigit
2020-06-15  9:01                         ` [dpdk-dev] [PATCH v3 5/7] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-06-15  9:28                           ` Zhao1, Wei
2020-06-17 16:50                           ` Ferruh Yigit
2020-06-18  1:23                             ` Zhao1, Wei
2020-06-18 11:12                               ` Ferruh Yigit
2020-06-20  3:53                                 ` Zhao1, Wei
2020-06-20  3:56                           ` Zhao1, Wei
2020-06-15  9:01                         ` [dpdk-dev] [PATCH v3 6/7] net/i40e: " Ivan Dyukov
2020-06-17 16:52                           ` Ferruh Yigit
2020-06-15  9:01                         ` [dpdk-dev] [PATCH v3 7/7] net/ice: " Ivan Dyukov
2020-06-17 16:54                           ` Ferruh Yigit
2020-07-02 13:21                       ` [dpdk-dev] [PATCH v4 0/7] ethdev: allow unknown link speed Ivan Dyukov
2020-07-02 13:21                         ` [dpdk-dev] [PATCH v4 1/7] " Ivan Dyukov
2020-07-02 13:21                         ` [dpdk-dev] [PATCH v4 2/7] ethdev: add a link status text representation Ivan Dyukov
2020-07-02 13:21                         ` [dpdk-dev] [PATCH v4 3/7] app: UNKNOWN link speed print format Ivan Dyukov
2020-07-02 13:21                         ` [dpdk-dev] [PATCH v4 4/7] doc: update sample app with unknown speed Ivan Dyukov
2020-07-02 13:21                         ` [dpdk-dev] [PATCH v4 5/7] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-07-02 23:38                           ` Zhao1, Wei
2020-07-02 13:21                         ` [dpdk-dev] [PATCH v4 6/7] net/i40e: " Ivan Dyukov
2020-07-03  8:13                           ` Jeff Guo
2020-07-02 13:21                         ` [dpdk-dev] [PATCH v4 7/7] net/ice: " Ivan Dyukov
2020-07-06 20:25                       ` [dpdk-dev] [PATCH v5 0/25] ethdev: allow unknown link speed Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 01/25] " Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 02/25] ethdev: add a link status text representation Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 03/25] app: UNKNOWN link speed print format Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 04/25] doc: update sample app with unknown speed Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 05/25] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 06/25] net/i40e: " Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 07/25] net/ice: " Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 08/25] examples: new link status print format Ivan Dyukov
2020-07-06 20:25                         ` [dpdk-dev] [PATCH v5 09/25] examples/bbdev_app: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 10/25] examples/ioat: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 11/25] examples/ip_*: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 12/25] examples/ip_pipeline: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 13/25] examples/ipsec-secgw: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 14/25] examples/kni: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 15/25] examples/l2fwd-crypt: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 16/25] examples/l2fwd-event: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 17/25] examples/l2fwd: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 18/25] examples/l3fwd-graph: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 19/25] examples/l3fwd-power: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 20/25] examples/multi_proc*: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 21/25] examples/ntb: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 22/25] example/performance*: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 23/25] examples/qos_sched: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 24/25] examples/server_nod*: " Ivan Dyukov
2020-07-06 20:26                         ` [dpdk-dev] [PATCH v5 25/25] examples/vm_power_*: " Ivan Dyukov
2020-07-06 20:37                       ` [dpdk-dev] [PATCH v6 0/25] ethdev: allow unknown link speed Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 01/25] " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 02/25] ethdev: add a link status text representation Ivan Dyukov
2020-07-06 21:24                           ` Stephen Hemminger
2020-07-06 21:30                           ` Stephen Hemminger
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 03/25] app: UNKNOWN link speed print format Ivan Dyukov
2020-07-06 21:26                           ` Stephen Hemminger
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 04/25] doc: update sample app with unknown speed Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 05/25] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 06/25] net/i40e: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 07/25] net/ice: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 08/25] examples: new link status print format Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 09/25] examples/bbdev_app: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 10/25] examples/ioat: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 11/25] examples/ip_*: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 12/25] examples/ip_pipeline: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 13/25] examples/ipsec-secgw: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 14/25] examples/kni: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 15/25] examples/l2fwd-crypt: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 16/25] examples/l2fwd-event: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 17/25] examples/l2fwd: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 18/25] examples/l3fwd-graph: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 19/25] examples/l3fwd-power: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 20/25] examples/multi_proc*: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 21/25] examples/ntb: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 22/25] example/performance*: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 23/25] examples/qos_sched: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 24/25] examples/server_nod*: " Ivan Dyukov
2020-07-06 20:37                         ` [dpdk-dev] [PATCH v6 25/25] examples/vm_power_*: " Ivan Dyukov
2020-07-10  7:01                       ` [dpdk-dev] [PATCH v7 0/25] ethdev: allow unknown link speed Ivan Dyukov
2020-07-10  7:01                         ` [dpdk-dev] [PATCH v7 01/25] " Ivan Dyukov
2020-07-10  7:02                         ` Ivan Dyukov [this message]
2020-07-10 13:06                           ` [dpdk-dev] [PATCH v7 02/25] ethdev: add a link status text representation Yigit, Ferruh
2020-07-10 15:22                             ` Stephen Hemminger
2020-07-10 15:39                               ` Yigit, Ferruh
2020-07-10 18:51                               ` Ivan Dyukov
2020-07-10 18:36                             ` Ivan Dyukov
2020-07-10 19:01                               ` Yigit, Ferruh
2020-07-10 15:11                           ` Thomas Monjalon
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 03/25] app: UNKNOWN link speed print format Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 04/25] doc: update sample app with unknown speed Ivan Dyukov
2020-07-10 14:57                           ` Thomas Monjalon
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 05/25] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 06/25] net/i40e: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 07/25] net/ice: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 08/25] examples: new link status print format Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 09/25] examples/bbdev_app: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 10/25] examples/ioat: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 11/25] examples/ip_*: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 12/25] examples/ip_pipeline: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 13/25] examples/ipsec-secgw: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 14/25] examples/kni: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 15/25] examples/l2fwd-crypt: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 16/25] examples/l2fwd-event: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 17/25] examples/l2fwd: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 18/25] examples/l3fwd-graph: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 19/25] examples/l3fwd-power: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 20/25] examples/multi_proc*: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 21/25] examples/ntb: " Ivan Dyukov
2020-07-10 13:20                           ` Yigit, Ferruh
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 22/25] example/performance*: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 23/25] examples/qos_sched: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 24/25] examples/server_nod*: " Ivan Dyukov
2020-07-10  7:02                         ` [dpdk-dev] [PATCH v7 25/25] examples/vm_power_*: " Ivan Dyukov
2020-07-10 15:02                         ` [dpdk-dev] [PATCH v7 0/25] ethdev: allow unknown link speed Thomas Monjalon
2020-07-10 15:47                           ` Yigit, Ferruh
2020-07-10 16:00                             ` Thomas Monjalon
2020-07-10 19:23                           ` Ivan Dyukov
2020-07-11 10:43                       ` [dpdk-dev] [PATCH v8 00/24] " Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 01/24] " Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 02/24] ethdev: add a link status text representation Ivan Dyukov
2020-07-11 11:27                           ` Thomas Monjalon
2020-07-11 18:58                             ` Ivan Dyukov
2020-07-12  7:35                               ` Thomas Monjalon
2020-07-12 19:21                                 ` Stephen Hemminger
2020-07-13  7:58                                   ` [dpdk-dev] [PATCH v8 02/24] ethdev: add a link status textrepresentation Morten Brørup
2020-07-12 20:09                                 ` [dpdk-dev] [PATCH v8 02/24] ethdev: add a link status text representation Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 03/24] app: UNKNOWN link speed print Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 04/24] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 05/24] net/i40e: " Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 06/24] net/ice: " Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 07/24] examples: new link status print format Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 08/24] examples/bbdev_app: " Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 09/24] examples/ioat: " Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 10/24] examples/ip_*: " Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 11/24] examples/ip_pipeline: " Ivan Dyukov
2020-07-11 10:43                         ` [dpdk-dev] [PATCH v8 12/24] examples/ipsec-secgw: " Ivan Dyukov
2020-07-13 10:30                           ` Ananyev, Konstantin
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 13/24] examples/kni: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 14/24] examples/l2fwd-crypt: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 15/24] examples/l2fwd-event: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 16/24] examples/l2fwd: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 17/24] examples/l3fwd-graph: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 18/24] examples/l3fwd-power: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 19/24] examples/multi_proc*: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 20/24] examples/ntb: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 21/24] example/performance*: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 22/24] examples/qos_sched: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 23/24] examples/server_nod*: " Ivan Dyukov
2020-07-11 10:44                         ` [dpdk-dev] [PATCH v8 24/24] examples/vm_power_*: " Ivan Dyukov
2020-08-11  8:52                       ` [dpdk-dev] [PATCH v9 00/24] ethdev: allow unknown link speed Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 01/24] " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 02/24] ethdev: add a link status text representation Ivan Dyukov
2020-08-11 11:02                           ` Gaëtan Rivet
2020-08-11 12:48                             ` Ivan Dyukov
2020-08-11 12:53                               ` Gaëtan Rivet
2020-08-11 13:00                                 ` Ivan Dyukov
2020-08-11 15:47                           ` Stephen Hemminger
2020-08-11 17:51                             ` Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 03/24] app: UNKNOWN link speed print Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 04/24] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 05/24] net/i40e: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 06/24] net/ice: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 07/24] examples: new link status print format Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 08/24] examples/bbdev_app: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 09/24] examples/ioat: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 10/24] examples/ip_*: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 11/24] examples/ip_pipeline: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 12/24] examples/ipsec-secgw: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 13/24] examples/kni: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 14/24] examples/l2fwd-crypt: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 15/24] examples/l2fwd-event: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 16/24] examples/l2fwd: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 17/24] examples/l3fwd-graph: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 18/24] examples/l3fwd-power: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 19/24] examples/multi_proc*: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 20/24] examples/ntb: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 21/24] example/performance*: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 22/24] examples/qos_sched: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 23/24] examples/server_nod*: " Ivan Dyukov
2020-08-11  8:52                         ` [dpdk-dev] [PATCH v9 24/24] examples/vm_power_*: " Ivan Dyukov
2020-09-07 13:24                         ` [dpdk-dev] [PATCH v9 00/24] ethdev: allow unknown link speed Ferruh Yigit
2020-09-07 15:29                           ` Morten Brørup
2020-09-08  6:16                             ` Ivan Dyukov
2020-09-08  6:37                               ` Morten Brørup
2020-09-10 19:33                       ` [dpdk-dev] [PATCH v10 " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 01/24] " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 02/24] ethdev: format a link status text Ivan Dyukov
2020-09-10 19:58                           ` Morten Brørup
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 03/24] app: update apps&docs with new UNKNOWN link speed Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 04/24] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 05/24] net/i40e: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 06/24] net/ice: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 07/24] examples: new link status print format Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 08/24] examples/bbdev_app: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 09/24] examples/ioat: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 10/24] examples/ip_*: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 11/24] examples/ip_pipeline: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 12/24] examples/ipsec-secgw: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 13/24] examples/kni: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 14/24] examples/l2fwd-crypt: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 15/24] examples/l2fwd-event: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 16/24] examples/l2fwd: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 17/24] examples/l3fwd-graph: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 18/24] examples/l3fwd-power: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 19/24] examples/multi_proc*: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 20/24] examples/ntb: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 21/24] example/performance*: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 22/24] examples/qos_sched: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 23/24] examples/server_nod*: " Ivan Dyukov
2020-09-10 19:33                         ` [dpdk-dev] [PATCH v10 24/24] examples/vm_power_*: " Ivan Dyukov
2020-09-15 19:06                       ` [dpdk-dev] [PATCH v11 00/24] ethdev: allow unknown link speed Ivan Dyukov
2020-09-15 19:06                         ` [dpdk-dev] [PATCH v11 01/24] " Ivan Dyukov
2020-09-15 19:06                         ` [dpdk-dev] [PATCH v11 02/24] ethdev: format a link status text Ivan Dyukov
2020-09-15 20:44                           ` Morten Brørup
2020-09-18 17:24                             ` Ferruh Yigit
2020-09-15 19:06                         ` [dpdk-dev] [PATCH v11 03/24] app: update apps&docs with new UNKNOWN link speed Ivan Dyukov
2020-09-18 17:24                           ` Ferruh Yigit
2020-09-15 19:06                         ` [dpdk-dev] [PATCH v11 04/24] net/ixgbe: return unknown speed in status Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 05/24] net/i40e: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 06/24] net/ice: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 07/24] examples: new link status print format Ivan Dyukov
2020-09-18 18:15                           ` Ferruh Yigit
2020-09-18 18:22                           ` Ferruh Yigit
2020-09-21 12:47                           ` Ferruh Yigit
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 08/24] examples/bbdev_app: " Ivan Dyukov
2020-09-18 17:53                           ` Ferruh Yigit
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 09/24] examples/ioat: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 10/24] examples/ip_*: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 11/24] examples/ip_pipeline: " Ivan Dyukov
2020-09-18 17:54                           ` Ferruh Yigit
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 12/24] examples/ipsec-secgw: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 13/24] examples/kni: " Ivan Dyukov
2020-09-18 18:07                           ` Ferruh Yigit
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 14/24] examples/l2fwd-crypt: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 15/24] examples/l2fwd-event: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 16/24] examples/l2fwd: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 17/24] examples/l3fwd-graph: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 18/24] examples/l3fwd-power: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 19/24] examples/multi_proc*: " Ivan Dyukov
2020-09-18 18:12                           ` Ferruh Yigit
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 20/24] examples/ntb: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 21/24] example/performance*: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 22/24] examples/qos_sched: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 23/24] examples/server_nod*: " Ivan Dyukov
2020-09-15 19:07                         ` [dpdk-dev] [PATCH v11 24/24] examples/vm_power_*: " Ivan Dyukov
2020-09-18 17:23                         ` [dpdk-dev] [PATCH v11 00/24] ethdev: allow unknown link speed Ferruh Yigit
2020-09-18 18:47                           ` Ferruh Yigit
2020-04-16 12:42       ` [dpdk-dev] [PATCH v12 2/7] net/virtio: replace default virtio speed Ivan Dyukov
2020-04-16 12:42       ` [dpdk-dev] [PATCH v12 3/7] net/virtio: refactor devargs parsing Ivan Dyukov
2020-04-16 12:42       ` [dpdk-dev] [PATCH v12 4/7] net/virtio: add link speed devarg Ivan Dyukov
2020-04-16 12:42       ` [dpdk-dev] [PATCH v12 5/7] net/virtio-user: fix devargs parsing Ivan Dyukov
2020-04-16 12:42       ` [dpdk-dev] [PATCH v12 6/7] net/virtio-user: adding link speed devarg Ivan Dyukov
2020-04-16 12:42       ` [dpdk-dev] [PATCH v12 7/7] net/virtio: Support of VIRTIO_NET_F_SPEED_DUPLEX Ivan Dyukov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200710070226.6045-3-i.dyukov@samsung.com \
    --to=i.dyukov@samsung.com \
    --cc=akhil.goyal@nxp.com \
    --cc=anatoly.burakov@intel.com \
    --cc=arybchenko@solarflare.com \
    --cc=beilei.xing@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=byron.marohn@intel.com \
    --cc=cristian.dumitrescu@intel.com \
    --cc=david.hunt@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=declan.doherty@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=jasvinder.singh@intel.com \
    --cc=jerinj@marvell.com \
    --cc=jia.guo@intel.com \
    --cc=jingjing.wu@intel.com \
    --cc=john.mcnamara@intel.com \
    --cc=kirankumark@marvell.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=mb@smartsharesystems.com \
    --cc=nicolas.chautru@intel.com \
    --cc=pbhagavatula@marvell.com \
    --cc=qiming.yang@intel.com \
    --cc=radu.nicolau@intel.com \
    --cc=skori@marvell.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    --cc=v.kuramshin@samsung.com \
    --cc=wei.zhao1@intel.com \
    --cc=wenzhuo.lu@intel.com \
    --cc=xiaoyun.li@intel.com \
    --cc=yipeng1.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).