[PATCH] net-sysfs: Report link speed as signed integer

Subsystems: networking [general], the rest

STALE4480d

8 messages, 5 authors, 2014-06-03 · open the first message on its own page

[PATCH] net-sysfs: Report link speed as signed integer

From: Michal Privoznik <hidden>
Date: 2014-06-02 14:25:38

The link speed is available at /sys/class/net/$nic/speed.
However, the speed is printed in unsigned integer format. This
makes userspace applications read an incorrect value (which
moreover changes through several architectures) while in fact
'-1' should be reported.

Before the change:
  # cat /sys/class/net/eth0/speed
  4294967295

After the change:
  # cat /sys/class/net/eth0/speed
  -1

Signed-off-by: Michal Privoznik <redacted>
---
 net/core/net-sysfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 1cac29e..99afdea 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -173,7 +173,7 @@ static ssize_t speed_show(struct device *dev,
 	if (netif_running(netdev)) {
 		struct ethtool_cmd cmd;
 		if (!__ethtool_get_settings(netdev, &cmd))
-			ret = sprintf(buf, fmt_udec, ethtool_cmd_speed(&cmd));
+			ret = sprintf(buf, fmt_dec, ethtool_cmd_speed(&cmd));
 	}
 	rtnl_unlock();
 	return ret;
-- 
2.0.0

Re: [PATCH] net-sysfs: Report link speed as signed integer

From: Jiri Pirko <jiri@resnulli.us>
Date: 2014-06-02 14:36:04

Mon, Jun 02, 2014 at 04:25:15PM CEST, mprivozn@redhat.com wrote:
quoted hunk
The link speed is available at /sys/class/net/$nic/speed.
However, the speed is printed in unsigned integer format. This
makes userspace applications read an incorrect value (which
moreover changes through several architectures) while in fact
'-1' should be reported.

Before the change:
 # cat /sys/class/net/eth0/speed
 4294967295

After the change:
 # cat /sys/class/net/eth0/speed
 -1

Signed-off-by: Michal Privoznik <redacted>
---
net/core/net-sysfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 1cac29e..99afdea 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -173,7 +173,7 @@ static ssize_t speed_show(struct device *dev,
	if (netif_running(netdev)) {
		struct ethtool_cmd cmd;
		if (!__ethtool_get_settings(netdev, &cmd))
-			ret = sprintf(buf, fmt_udec, ethtool_cmd_speed(&cmd));
+			ret = sprintf(buf, fmt_dec, ethtool_cmd_speed(&cmd));
I wonder why this should be signed. What -1 means? What driver reports
this?
	}
	rtnl_unlock();
	return ret;
-- 
2.0.0

Re: [PATCH] net-sysfs: Report link speed as signed integer

From: Michal Privoznik <hidden>
Date: 2014-06-02 14:43:40

On 02.06.2014 16:35, Jiri Pirko wrote:
Mon, Jun 02, 2014 at 04:25:15PM CEST, mprivozn@redhat.com wrote:
quoted
The link speed is available at /sys/class/net/$nic/speed.
However, the speed is printed in unsigned integer format. This
makes userspace applications read an incorrect value (which
moreover changes through several architectures) while in fact
'-1' should be reported.

Before the change:
  # cat /sys/class/net/eth0/speed
  4294967295

After the change:
  # cat /sys/class/net/eth0/speed
  -1

Signed-off-by: Michal Privoznik <redacted>
---
net/core/net-sysfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 1cac29e..99afdea 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -173,7 +173,7 @@ static ssize_t speed_show(struct device *dev,
	if (netif_running(netdev)) {
		struct ethtool_cmd cmd;
		if (!__ethtool_get_settings(netdev, &cmd))
-			ret = sprintf(buf, fmt_udec, ethtool_cmd_speed(&cmd));
+			ret = sprintf(buf, fmt_dec, ethtool_cmd_speed(&cmd));
I wonder why this should be signed. What -1 means? What driver reports
this?
This is e1000e. It seems like a default value. From e1000_get_settings() 
in drivers/net/ethernet/intel/e1000e/ethtool.c:

     speed = -1;
     ecmd->duplex = -1;

     if (netif_running(netdev)) {
         if (netif_carrier_ok(netdev)) {
             speed = adapter->link_speed;
             ecmd->duplex = adapter->link_duplex - 1;
         }
     } else if (!pm_runtime_suspended(netdev->dev.parent)) {
	...
     }

     ethtool_cmd_speed_set(ecmd, speed);

If I unplug the cord, NIC is nor running nor runtime suspended.

Michal

Re: [PATCH] net-sysfs: Report link speed as signed integer

From: Veaceslav Falico <hidden>
Date: 2014-06-02 15:02:27

On Mon, Jun 02, 2014 at 04:35:57PM +0200, Jiri Pirko wrote:
Mon, Jun 02, 2014 at 04:25:15PM CEST, mprivozn@redhat.com wrote:
quoted
The link speed is available at /sys/class/net/$nic/speed.
However, the speed is printed in unsigned integer format. This
makes userspace applications read an incorrect value (which
moreover changes through several architectures) while in fact
'-1' should be reported.

Before the change:
 # cat /sys/class/net/eth0/speed
 4294967295

After the change:
 # cat /sys/class/net/eth0/speed
 -1

Signed-off-by: Michal Privoznik <redacted>
---
net/core/net-sysfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 1cac29e..99afdea 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -173,7 +173,7 @@ static ssize_t speed_show(struct device *dev,
	if (netif_running(netdev)) {
		struct ethtool_cmd cmd;
		if (!__ethtool_get_settings(netdev, &cmd))
-			ret = sprintf(buf, fmt_udec, ethtool_cmd_speed(&cmd));
+			ret = sprintf(buf, fmt_dec, ethtool_cmd_speed(&cmd));
I wonder why this should be signed. What -1 means? What driver reports
this?
My first thoughts were exactly this. There is SPEED_UNKOWN (along with
_10, _100, _1000 etc.) that's -1, and quite a few drivers use it/set it.

I wonder, though, if we should document it or just output "Unknown" instead
of -1.
quoted
	}
	rtnl_unlock();
	return ret;
--
2.0.0
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Re: [PATCH] net-sysfs: Report link speed as signed integer

From: Florian Fainelli <f.fainelli@gmail.com>
Date: 2014-06-02 17:22:27

2014-06-02 8:01 GMT-07:00 Veaceslav Falico [off-list ref]:
On Mon, Jun 02, 2014 at 04:35:57PM +0200, Jiri Pirko wrote:
quoted
Mon, Jun 02, 2014 at 04:25:15PM CEST, mprivozn@redhat.com wrote:
quoted
The link speed is available at /sys/class/net/$nic/speed.
However, the speed is printed in unsigned integer format. This
makes userspace applications read an incorrect value (which
moreover changes through several architectures) while in fact
'-1' should be reported.

Before the change:
 # cat /sys/class/net/eth0/speed
 4294967295

After the change:
 # cat /sys/class/net/eth0/speed
 -1

Signed-off-by: Michal Privoznik <redacted>
---
net/core/net-sysfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 1cac29e..99afdea 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -173,7 +173,7 @@ static ssize_t speed_show(struct device *dev,
        if (netif_running(netdev)) {
                struct ethtool_cmd cmd;
                if (!__ethtool_get_settings(netdev, &cmd))
-                       ret = sprintf(buf, fmt_udec,
ethtool_cmd_speed(&cmd));
+                       ret = sprintf(buf, fmt_dec,
ethtool_cmd_speed(&cmd));

I wonder why this should be signed. What -1 means? What driver reports
this?

My first thoughts were exactly this. There is SPEED_UNKOWN (along with
_10, _100, _1000 etc.) that's -1, and quite a few drivers use it/set it.

I wonder, though, if we should document it or just output "Unknown" instead
of -1.
I would document the special "Unkown" value in
Documentation/ABI/testing/sysfs-class-net and update speed_show() to
handle it. -1 is confusing for anyone to realize what this means.
quoted
quoted
        }
        rtnl_unlock();
        return ret;
--
2.0.0
--
To unsubscribe from this list: send the line "unsubscribe netdev" in

the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe netdev" in

the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Florian

Re: [PATCH] net-sysfs: Report link speed as signed integer

From: David Miller <davem@davemloft.net>
Date: 2014-06-02 18:10:53

From: Veaceslav Falico <redacted>
Date: Mon, 2 Jun 2014 17:01:50 +0200
I wonder, though, if we should document it or just output "Unknown"
instead of -1.
All of this discussion means that we can't change the format string
without potentially breaking something out there interpreting the -1
value, however it gets output now.

I think we just have to leave things as-is and document them in the
sysfs ABI docs.

I'm not applying this patch.

Re: [PATCH] net-sysfs: Report link speed as signed integer

From: Michal Privoznik <hidden>
Date: 2014-06-03 07:07:37

On 02.06.2014 20:10, David Miller wrote:
From: Veaceslav Falico <redacted>
Date: Mon, 2 Jun 2014 17:01:50 +0200
quoted
I wonder, though, if we should document it or just output "Unknown"
instead of -1.
All of this discussion means that we can't change the format string
without potentially breaking something out there interpreting the -1
value, however it gets output now.
No, the discussion means reporting -1 as link speed is confusing.
I think we just have to leave things as-is and document them in the
sysfs ABI docs.
Well, that's rather unpleasant.
I'm not applying this patch.
Michal

Re: [PATCH] net-sysfs: Report link speed as signed integer

From: Michal Privoznik <hidden>
Date: 2014-06-03 12:05:18

On 03.06.2014 09:07, Michal Privoznik wrote:
On 02.06.2014 20:10, David Miller wrote:
quoted
From: Veaceslav Falico <redacted>
Date: Mon, 2 Jun 2014 17:01:50 +0200
quoted
I wonder, though, if we should document it or just output "Unknown"
instead of -1.
All of this discussion means that we can't change the format string
without potentially breaking something out there interpreting the -1
value, however it gets output now.
One more thing. The commit that changed the behavior is 8ae6daca which 
is part of the 3.0 release. So any 2.6.X kernel does report -1 while 
with 3.Y kernel you'll get this meaningless value. Having said that, we 
already broke the applications so how about unbreaking them?

Michal
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help