netdev.vger.kernel.org archive mirror
 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 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).