All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH ethtool 0/5] Extend uAPI with lanes parameter
@ 2021-01-06 13:10 Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 1/5] ethtool: Extend ethtool link modes settings uAPI with lanes Danielle Ratson
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Danielle Ratson @ 2021-01-06 13:10 UTC (permalink / raw)
  To: netdev; +Cc: mkubecek, f.fainelli, kuba, andrew, mlxsw, Danielle Ratson

From: Danielle Ratson <danieller@nvidia.com>

Currently, there is no way of knowing how many lanes will be use to
achieve a wanted speed.
For example, 100G speed can be achieved using: 2X50 or 4X25.

In order to solve that, extend ethtool uAPI with lanes as a new link
mode setting so the command below, for example, will be supported:
$ ethtool -s swp5 lanes N

Patch #1: Update headers with the new parameter.
Patch #2: Support lanes in netlink.
Patch #3: Expose the number of lanes in use.
Patch #4: Add auto-completion for lanes.
Patch #5: Add lanes to man page.

Danielle Ratson (5):
  ethtool: Extend ethtool link modes settings uAPI with lanes
  netlink: settings: Add netlink support for lanes parameter
  netlink: settings: Expose the number of lanes in use
  shell-completion: Add completion for lanes
  man: Add man page for setting lanes parameter

 ethtool.8.in                  |  4 ++++
 ethtool.c                     |  1 +
 netlink/desc-ethtool.c        |  1 +
 netlink/settings.c            | 17 +++++++++++++++++
 shell-completion/bash/ethtool |  4 ++++
 uapi/linux/ethtool.h          |  8 ++++++++
 uapi/linux/ethtool_netlink.h  |  1 +
 7 files changed, 36 insertions(+)

-- 
2.26.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH ethtool 1/5] ethtool: Extend ethtool link modes settings uAPI with lanes
  2021-01-06 13:10 [PATCH ethtool 0/5] Extend uAPI with lanes parameter Danielle Ratson
@ 2021-01-06 13:10 ` Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 2/5] netlink: settings: Add netlink support for lanes parameter Danielle Ratson
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Danielle Ratson @ 2021-01-06 13:10 UTC (permalink / raw)
  To: netdev; +Cc: mkubecek, f.fainelli, kuba, andrew, mlxsw, Danielle Ratson

Add ETHTOOL_A_LINKMODES_LANES, expand ethtool_link_settings with
lanes attribute and define valid lanes in order to support a new
lanes-selector.

Signed-off-by: Danielle Ratson <danieller@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
---
 netlink/desc-ethtool.c       | 1 +
 uapi/linux/ethtool.h         | 8 ++++++++
 uapi/linux/ethtool_netlink.h | 1 +
 3 files changed, 10 insertions(+)

diff --git a/netlink/desc-ethtool.c b/netlink/desc-ethtool.c
index 96291b9..fe5d7ba 100644
--- a/netlink/desc-ethtool.c
+++ b/netlink/desc-ethtool.c
@@ -87,6 +87,7 @@ static const struct pretty_nla_desc __linkmodes_desc[] = {
 	NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_DUPLEX),
 	NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG),
 	NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE),
+	NLATTR_DESC_U32(ETHTOOL_A_LINKMODES_LANES),
 };
 
 static const struct pretty_nla_desc __linkstate_desc[] = {
diff --git a/uapi/linux/ethtool.h b/uapi/linux/ethtool.h
index 052689b..85ec9c8 100644
--- a/uapi/linux/ethtool.h
+++ b/uapi/linux/ethtool.h
@@ -1736,6 +1736,14 @@ static __inline__ int ethtool_validate_speed(__u32 speed)
 	return speed <= INT_MAX || speed == (__u32)SPEED_UNKNOWN;
 }
 
+/* Lanes, 1, 2, 4 or 8. */
+#define ETHTOOL_LANES_1			1
+#define ETHTOOL_LANES_2			2
+#define ETHTOOL_LANES_4			4
+#define ETHTOOL_LANES_8			8
+
+#define ETHTOOL_LANES_UNKNOWN		0
+
 /* Duplex, half or full. */
 #define DUPLEX_HALF		0x00
 #define DUPLEX_FULL		0x01
diff --git a/uapi/linux/ethtool_netlink.h b/uapi/linux/ethtool_netlink.h
index c022883..0cd6906 100644
--- a/uapi/linux/ethtool_netlink.h
+++ b/uapi/linux/ethtool_netlink.h
@@ -227,6 +227,7 @@ enum {
 	ETHTOOL_A_LINKMODES_DUPLEX,		/* u8 */
 	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG,	/* u8 */
 	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE,	/* u8 */
+	ETHTOOL_A_LINKMODES_LANES,		/* u32 */
 
 	/* add new constants above here */
 	__ETHTOOL_A_LINKMODES_CNT,
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH ethtool 2/5] netlink: settings: Add netlink support for lanes parameter
  2021-01-06 13:10 [PATCH ethtool 0/5] Extend uAPI with lanes parameter Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 1/5] ethtool: Extend ethtool link modes settings uAPI with lanes Danielle Ratson
@ 2021-01-06 13:10 ` Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 3/5] netlink: settings: Expose the number of lanes in use Danielle Ratson
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Danielle Ratson @ 2021-01-06 13:10 UTC (permalink / raw)
  To: netdev; +Cc: mkubecek, f.fainelli, kuba, andrew, mlxsw, Danielle Ratson

Add support for "ethtool -s <dev> lanes N ..." for setting a specific
number of lanes.

Signed-off-by: Danielle Ratson <danieller@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
---
 ethtool.c          | 1 +
 netlink/settings.c | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/ethtool.c b/ethtool.c
index 585aafa..fcb09f7 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -5620,6 +5620,7 @@ static const struct option args[] = {
 		.nlfunc	= nl_sset,
 		.help	= "Change generic options",
 		.xhelp	= "		[ speed %d ]\n"
+			  "		[ lanes %d ]\n"
 			  "		[ duplex half|full ]\n"
 			  "		[ port tp|aui|bnc|mii|fibre|da ]\n"
 			  "		[ mdix auto|on|off ]\n"
diff --git a/netlink/settings.c b/netlink/settings.c
index 90c28b1..6cb5d5b 100644
--- a/netlink/settings.c
+++ b/netlink/settings.c
@@ -20,6 +20,7 @@
 struct link_mode_info {
 	enum link_mode_class	class;
 	u32			speed;
+	u32			lanes;
 	u8			duplex;
 };
 
@@ -1067,6 +1068,13 @@ static const struct param_parser sset_params[] = {
 		.handler	= nl_parse_direct_u32,
 		.min_argc	= 1,
 	},
+	{
+		.arg		= "lanes",
+		.group		= ETHTOOL_MSG_LINKMODES_SET,
+		.type		= ETHTOOL_A_LINKMODES_LANES,
+		.handler	= nl_parse_direct_u32,
+		.min_argc	= 1,
+	},
 	{
 		.arg		= "duplex",
 		.group		= ETHTOOL_MSG_LINKMODES_SET,
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH ethtool 3/5] netlink: settings: Expose the number of lanes in use
  2021-01-06 13:10 [PATCH ethtool 0/5] Extend uAPI with lanes parameter Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 1/5] ethtool: Extend ethtool link modes settings uAPI with lanes Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 2/5] netlink: settings: Add netlink support for lanes parameter Danielle Ratson
@ 2021-01-06 13:10 ` Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 4/5] shell-completion: Add completion for lanes Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 5/5] man: Add man page for setting lanes parameter Danielle Ratson
  4 siblings, 0 replies; 6+ messages in thread
From: Danielle Ratson @ 2021-01-06 13:10 UTC (permalink / raw)
  To: netdev; +Cc: mkubecek, f.fainelli, kuba, andrew, mlxsw, Danielle Ratson

From: Danielle Ratson <danieller@nvidia.com>

Currently, the user does not have the information regarding how many lanes
are used when the link is up.

After adding a possibility to advertise or force a specific number of
lanes this information becomes helpful.

Expose the number of lanes in use if the information is passed from
kernel.

Signed-off-by: Danielle Ratson <danieller@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
---
 netlink/settings.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/netlink/settings.c b/netlink/settings.c
index 6cb5d5b..13a080c 100644
--- a/netlink/settings.c
+++ b/netlink/settings.c
@@ -474,6 +474,15 @@ int linkmodes_reply_cb(const struct nlmsghdr *nlhdr, void *data)
 		else
 			printf("\tSpeed: %uMb/s\n", val);
 	}
+	if (tb[ETHTOOL_A_LINKMODES_LANES]) {
+		uint32_t val = mnl_attr_get_u32(tb[ETHTOOL_A_LINKMODES_LANES]);
+
+		print_banner(nlctx);
+		if (val == 0 || val == (uint16_t)(-1) || val == (uint32_t)(-1))
+			printf("\tLanes: Unknown!\n");
+		else
+			printf("\tLanes: %u\n", val);
+	}
 	if (tb[ETHTOOL_A_LINKMODES_DUPLEX]) {
 		uint8_t val = mnl_attr_get_u8(tb[ETHTOOL_A_LINKMODES_DUPLEX]);
 
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH ethtool 4/5] shell-completion: Add completion for lanes
  2021-01-06 13:10 [PATCH ethtool 0/5] Extend uAPI with lanes parameter Danielle Ratson
                   ` (2 preceding siblings ...)
  2021-01-06 13:10 ` [PATCH ethtool 3/5] netlink: settings: Expose the number of lanes in use Danielle Ratson
@ 2021-01-06 13:10 ` Danielle Ratson
  2021-01-06 13:10 ` [PATCH ethtool 5/5] man: Add man page for setting lanes parameter Danielle Ratson
  4 siblings, 0 replies; 6+ messages in thread
From: Danielle Ratson @ 2021-01-06 13:10 UTC (permalink / raw)
  To: netdev; +Cc: mkubecek, f.fainelli, kuba, andrew, mlxsw, Danielle Ratson

Lanes was added as a new link mode setting in ethtool.

Support completion for lanes when setting parameters.

Signed-off-by: Danielle Ratson <danieller@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
---
 shell-completion/bash/ethtool | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/shell-completion/bash/ethtool b/shell-completion/bash/ethtool
index 5305559..4557341 100644
--- a/shell-completion/bash/ethtool
+++ b/shell-completion/bash/ethtool
@@ -97,6 +97,7 @@ _ethtool_change()
 		[speed]=notseen
 		[wol]=notseen
 		[xcvr]=notseen
+		[lanes]=notseen
 	)
 
 	local -A msgtypes=(
@@ -175,6 +176,9 @@ _ethtool_change()
 		xcvr)
 			COMPREPLY=( $( compgen -W 'internal external' -- "$cur" ) )
 			return ;;
+		lanes)
+			# Number
+			return ;;
 	esac
 
 	local -a comp_words=()
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH ethtool 5/5] man: Add man page for setting lanes parameter
  2021-01-06 13:10 [PATCH ethtool 0/5] Extend uAPI with lanes parameter Danielle Ratson
                   ` (3 preceding siblings ...)
  2021-01-06 13:10 ` [PATCH ethtool 4/5] shell-completion: Add completion for lanes Danielle Ratson
@ 2021-01-06 13:10 ` Danielle Ratson
  4 siblings, 0 replies; 6+ messages in thread
From: Danielle Ratson @ 2021-01-06 13:10 UTC (permalink / raw)
  To: netdev; +Cc: mkubecek, f.fainelli, kuba, andrew, mlxsw, Danielle Ratson

From: Danielle Ratson <danieller@nvidia.com>

Lanes parameter was added for setting using ethtool.

Update the man page to include the new parameter.

Signed-off-by: Danielle Ratson <danieller@nvidia.com>
---
 ethtool.8.in | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/ethtool.8.in b/ethtool.8.in
index ba4e245..fe49b66 100644
--- a/ethtool.8.in
+++ b/ethtool.8.in
@@ -251,6 +251,7 @@ ethtool \- query or control network driver and hardware settings
 .B ethtool \-s
 .I devname
 .BN speed
+.BN lanes
 .B2 duplex half full
 .B4 port tp aui bnc mii fibre da
 .B3 mdix auto on off
@@ -685,6 +686,9 @@ Set speed in Mb/s.
 .B ethtool
 with just the device name as an argument will show you the supported device speeds.
 .TP
+.BI lanes \ N
+Set number of lanes.
+.TP
 .A2 duplex half full
 Sets full or half duplex mode.
 .TP
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-01-06 13:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-06 13:10 [PATCH ethtool 0/5] Extend uAPI with lanes parameter Danielle Ratson
2021-01-06 13:10 ` [PATCH ethtool 1/5] ethtool: Extend ethtool link modes settings uAPI with lanes Danielle Ratson
2021-01-06 13:10 ` [PATCH ethtool 2/5] netlink: settings: Add netlink support for lanes parameter Danielle Ratson
2021-01-06 13:10 ` [PATCH ethtool 3/5] netlink: settings: Expose the number of lanes in use Danielle Ratson
2021-01-06 13:10 ` [PATCH ethtool 4/5] shell-completion: Add completion for lanes Danielle Ratson
2021-01-06 13:10 ` [PATCH ethtool 5/5] man: Add man page for setting lanes parameter Danielle Ratson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.