DPDK patches and discussions
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: <skori@marvell.com>
Cc: Thomas Monjalon <thomas@monjalon.net>,
	Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>, <dev@dpdk.org>,
	Nithin Dabilpuram <ndabilpuram@marvell.com>
Subject: Re: [PATCH v3 1/1] ethdev: add support to provide link type
Date: Wed, 13 Aug 2025 08:04:39 -0700	[thread overview]
Message-ID: <20250813080439.113a955d@hermes.local> (raw)
In-Reply-To: <20250813084508.1446318-1-skori@marvell.com>

On Wed, 13 Aug 2025 14:13:56 +0530
<skori@marvell.com> wrote:

> 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.

This is causing test failures.
I suspect that since resulting string changed, the test expectations are off.
Need to fix tests as well.

      parent reply	other threads:[~2025-08-13 15:04 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   ` [PATCH v3 1/1] " skori
2025-08-13 10:25     ` Thomas Monjalon
2025-08-13 12:16       ` Ivan Malov
2025-08-13 14:17         ` Stephen Hemminger
2025-08-13 15:04     ` Stephen Hemminger [this message]

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=20250813080439.113a955d@hermes.local \
    --to=stephen@networkplumber.org \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=ndabilpuram@marvell.com \
    --cc=skori@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).