From: <skori@marvell.com>
To: Thomas Monjalon <thomas@monjalon.net>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Cc: <dev@dpdk.org>, Sunil Kumar Kori <skori@marvell.com>,
Nithin Dabilpuram <ndabilpuram@marvell.com>
Subject: [PATCH v3 1/1] ethdev: add support to provide link type
Date: Wed, 13 Aug 2025 14:13:56 +0530 [thread overview]
Message-ID: <20250813084508.1446318-1-skori@marvell.com> (raw)
In-Reply-To: <20250606092904.3145608-1-skori@marvell.com>
From: Sunil Kumar Kori <skori@marvell.com>
Adding link type parameter to provide the type
of port like twisted pair, fibre etc.
Also added an API to convert the RTE_ETH_LINK_TYPE_XXX
to a readable string.
Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
---
v2..v3
- Extend link type list as per suggestion
lib/ethdev/ethdev_trace.h | 7 +++++
lib/ethdev/ethdev_trace_points.c | 3 ++
lib/ethdev/rte_ethdev.c | 47 ++++++++++++++++++++++++++++++--
lib/ethdev/rte_ethdev.h | 47 ++++++++++++++++++++++++++++++++
4 files changed, 102 insertions(+), 2 deletions(-)
diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h
index 482befc209..c5cba0edba 100644
--- a/lib/ethdev/ethdev_trace.h
+++ b/lib/ethdev/ethdev_trace.h
@@ -2110,6 +2110,13 @@ RTE_TRACE_POINT_FP(
rte_trace_point_emit_string(ret);
)
+RTE_TRACE_POINT_FP(
+ rte_eth_trace_link_type_to_str,
+ RTE_TRACE_POINT_ARGS(uint8_t link_type, const char *ret),
+ rte_trace_point_emit_u8(link_type);
+ rte_trace_point_emit_string(ret);
+);
+
/* Called in loop in examples/bond and examples/ethtool */
RTE_TRACE_POINT_FP(
rte_eth_trace_macaddr_get,
diff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c
index 071c508327..706acdf356 100644
--- a/lib/ethdev/ethdev_trace_points.c
+++ b/lib/ethdev/ethdev_trace_points.c
@@ -206,6 +206,9 @@ RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_speed_to_str,
RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_to_str,
lib.ethdev.link_to_str)
+RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_type_to_str,
+ lib.ethdev.link_type_to_str)
+
RTE_TRACE_POINT_REGISTER(rte_eth_trace_stats_get,
lib.ethdev.stats_get)
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index dd7c00bc94..0cf4a805b7 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -3285,18 +3285,61 @@ rte_eth_link_to_str(char *str, size_t len, const struct rte_eth_link *eth_link)
if (eth_link->link_status == RTE_ETH_LINK_DOWN)
ret = snprintf(str, len, "Link down");
else
- ret = snprintf(str, len, "Link up at %s %s %s",
+ ret = snprintf(str, len, "Link up at %s %s %s %s",
rte_eth_link_speed_to_str(eth_link->link_speed),
(eth_link->link_duplex == RTE_ETH_LINK_FULL_DUPLEX) ?
"FDX" : "HDX",
(eth_link->link_autoneg == RTE_ETH_LINK_AUTONEG) ?
- "Autoneg" : "Fixed");
+ "Autoneg" : "Fixed",
+ rte_eth_link_type_to_str(eth_link->link_type));
rte_eth_trace_link_to_str(len, eth_link, str, ret);
return ret;
}
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_link_type_to_str, 25.11)
+const char *
+rte_eth_link_type_to_str(uint8_t link_type)
+{
+ static const char * const link_type_str[] = {
+ [RTE_ETH_LINK_TYPE_NONE] = "None",
+ [RTE_ETH_LINK_TYPE_TP] = "Twisted Pair",
+ [RTE_ETH_LINK_TYPE_AUI] = "Attachment Unit Interface",
+ [RTE_ETH_LINK_TYPE_MII] = "Media Independent Interface",
+ [RTE_ETH_LINK_TYPE_FIBRE] = "Fibre",
+ [RTE_ETH_LINK_TYPE_BNC] = "BNC",
+ [RTE_ETH_LINK_TYPE_DA] = "Direct Attach Copper",
+ [RTE_ETH_LINK_TYPE_SGMII] = "SGMII",
+ [RTE_ETH_LINK_TYPE_QSGMII] = "QSGMII",
+ [RTE_ETH_LINK_TYPE_XFI] = "XFI",
+ [RTE_ETH_LINK_TYPE_SFI] = "SFI",
+ [RTE_ETH_LINK_TYPE_XLAUI] = "XLAUI",
+ [RTE_ETH_LINK_TYPE_GAUI] = "GAUI",
+ [RTE_ETH_LINK_TYPE_XAUI] = "XAUI",
+ [RTE_ETH_LINK_TYPE_GBASE] = "GBASE",
+ [RTE_ETH_LINK_TYPE_CAUI] = "CAUI",
+ [RTE_ETH_LINK_TYPE_LAUI] = "LAUI",
+ [RTE_ETH_LINK_TYPE_SFP] = "SFP",
+ [RTE_ETH_LINK_TYPE_SFP_DD] = "SFP_DD",
+ [RTE_ETH_LINK_TYPE_SFP_PLUS] = "SFP_PLUS",
+ [RTE_ETH_LINK_TYPE_SFP28] = "SFP28",
+ [RTE_ETH_LINK_TYPE_QSFP] = "QSFP",
+ [RTE_ETH_LINK_TYPE_QSFP_PLUS] = "QSFP_PLUS",
+ [RTE_ETH_LINK_TYPE_QSFP28] = "QSFP28",
+ [RTE_ETH_LINK_TYPE_QSFP56] = "QSFP56",
+ [RTE_ETH_LINK_TYPE_QSFP_DD] = "QSFP_DD",
+ [RTE_ETH_LINK_TYPE_OTHER] = "Unknown"
+ };
+ const char *str = NULL;
+
+ if ((link_type < RTE_DIM(link_type_str)) && link_type_str[link_type])
+ str = link_type_str[link_type];
+
+ rte_eth_trace_link_type_to_str(link_type, str);
+ return str;
+}
+
RTE_EXPORT_SYMBOL(rte_eth_stats_get)
int
rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index f9fb6ae549..e82e50017f 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -329,6 +329,38 @@ struct rte_eth_stats {
#define RTE_ETH_SPEED_NUM_UNKNOWN UINT32_MAX /**< Unknown */
/**@}*/
+/**@{@name PORT type
+ * Ethernet port type
+ */
+#define RTE_ETH_LINK_TYPE_NONE 0 /**< Not defined */
+#define RTE_ETH_LINK_TYPE_TP 1 /**< Twisted Pair */
+#define RTE_ETH_LINK_TYPE_AUI 2 /**< Attachment Unit Interface */
+#define RTE_ETH_LINK_TYPE_MII 3 /**< Media Independent Interface */
+#define RTE_ETH_LINK_TYPE_FIBRE 4 /**< Fibre */
+#define RTE_ETH_LINK_TYPE_BNC 5 /**< BNC */
+#define RTE_ETH_LINK_TYPE_DA 6 /**< Direct Attach copper */
+#define RTE_ETH_LINK_TYPE_SGMII 7 /**< SGMII */
+#define RTE_ETH_LINK_TYPE_QSGMII 8 /**< QSGMII */
+#define RTE_ETH_LINK_TYPE_XFI 9 /**< XFI */
+#define RTE_ETH_LINK_TYPE_SFI 10 /**< SFI */
+#define RTE_ETH_LINK_TYPE_XLAUI 11 /**< XLAUI */
+#define RTE_ETH_LINK_TYPE_GAUI 12 /**< GAUI */
+#define RTE_ETH_LINK_TYPE_XAUI 13 /**< XAUI */
+#define RTE_ETH_LINK_TYPE_GBASE 14 /**< GBASE */
+#define RTE_ETH_LINK_TYPE_CAUI 15 /**< CAUI */
+#define RTE_ETH_LINK_TYPE_LAUI 16 /**< LAUI */
+#define RTE_ETH_LINK_TYPE_SFP 17 /**< SFP */
+#define RTE_ETH_LINK_TYPE_SFP_DD 18 /**< SFP_DD */
+#define RTE_ETH_LINK_TYPE_SFP_PLUS 19 /**< SFP_PLUS */
+#define RTE_ETH_LINK_TYPE_SFP28 20 /**< SFP28 */
+#define RTE_ETH_LINK_TYPE_QSFP 21 /**< QSFP */
+#define RTE_ETH_LINK_TYPE_QSFP_PLUS 22 /**< QSFP_PLUS */
+#define RTE_ETH_LINK_TYPE_QSFP28 23 /**< QSFP28 */
+#define RTE_ETH_LINK_TYPE_QSFP56 24 /**< QSFP56 */
+#define RTE_ETH_LINK_TYPE_QSFP_DD 25 /**< QSFP_DD */
+#define RTE_ETH_LINK_TYPE_OTHER 0x1F /**< Other type */
+/**@}*/
+
/**
* A structure used to retrieve link-level information of an Ethernet port.
*/
@@ -341,6 +373,7 @@ struct rte_eth_link {
uint16_t link_duplex : 1; /**< RTE_ETH_LINK_[HALF/FULL]_DUPLEX */
uint16_t link_autoneg : 1; /**< RTE_ETH_LINK_[AUTONEG/FIXED] */
uint16_t link_status : 1; /**< RTE_ETH_LINK_[DOWN/UP] */
+ uint16_t link_type : 5; /**< RTE_ETH_LINK_TYPE_XXX */
};
};
};
@@ -3116,6 +3149,20 @@ int rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *link)
__rte_experimental
const char *rte_eth_link_speed_to_str(uint32_t link_speed);
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * This function converts an Ethernet link type to a string.
+ *
+ * @param link_type
+ * The link type to convert.
+ * @return
+ * The string representation of the link type.
+ */
+__rte_experimental
+const char *rte_eth_link_type_to_str(uint8_t link_type);
+
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
--
2.43.0
next prev parent reply other threads:[~2025-08-13 8:45 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-05 11:31 [PATCH] " skori
2025-06-05 15:26 ` Stephen Hemminger
2025-06-06 9:28 ` [PATCH v2 1/1] " skori
2025-06-06 9:54 ` Morten Brørup
2025-06-06 15:23 ` Stephen Hemminger
2025-06-10 5:02 ` [EXTERNAL] " Sunil Kumar Kori
2025-06-10 6:45 ` Morten Brørup
2025-08-13 7:42 ` Sunil Kumar Kori
2025-08-13 8:42 ` [PATCH] " skori
2025-08-13 8:43 ` skori [this message]
2025-08-13 10:25 ` [PATCH v3 1/1] " Thomas Monjalon
2025-08-13 12:16 ` Ivan Malov
2025-08-13 14:17 ` Stephen Hemminger
2025-08-13 15:04 ` Stephen Hemminger
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=20250813084508.1446318-1-skori@marvell.com \
--to=skori@marvell.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ndabilpuram@marvell.com \
--cc=thomas@monjalon.net \
/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).