net: Add testing sysfs attribute
authorAndrew Lunn <andrew@lunn.ch>
Sun, 19 Apr 2020 22:11:51 +0000 (00:11 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 20 Apr 2020 19:43:24 +0000 (12:43 -0700)
Similar to speed, duplex and dorment, report the testing status
in sysfs.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/ABI/testing/sysfs-class-net
net/core/net-sysfs.c

index 664a8f6a634f3588e769f4e72cc764f66d9c5f1e..3b404577f380267f2fc30ffb3de88f67555b8c54 100644 (file)
@@ -124,6 +124,19 @@ Description:
                authentication is performed (e.g: 802.1x). 'link_mode' attribute
                will also reflect the dormant state.
 
+What:          /sys/class/net/<iface>/testing
+Date:          April 2002
+KernelVersion: 5.8
+Contact:       netdev@vger.kernel.org
+Description:
+               Indicates whether the interface is under test. Possible
+               values are:
+               0: interface is not being tested
+               1: interface is being tested
+
+               When an interface is under test, it cannot be expected
+               to pass packets as normal.
+
 What:          /sys/clas/net/<iface>/duplex
 Date:          October 2009
 KernelVersion: 2.6.33
index 4773ad6ec1114cd1dc364cc7470379289d7034db..0d9e46de205e9e5338b56ecd9441338929e07bc1 100644 (file)
@@ -243,6 +243,18 @@ static ssize_t duplex_show(struct device *dev,
 }
 static DEVICE_ATTR_RO(duplex);
 
+static ssize_t testing_show(struct device *dev,
+                           struct device_attribute *attr, char *buf)
+{
+       struct net_device *netdev = to_net_dev(dev);
+
+       if (netif_running(netdev))
+               return sprintf(buf, fmt_dec, !!netif_testing(netdev));
+
+       return -EINVAL;
+}
+static DEVICE_ATTR_RO(testing);
+
 static ssize_t dormant_show(struct device *dev,
                            struct device_attribute *attr, char *buf)
 {
@@ -260,7 +272,7 @@ static const char *const operstates[] = {
        "notpresent", /* currently unused */
        "down",
        "lowerlayerdown",
-       "testing", /* currently unused */
+       "testing",
        "dormant",
        "up"
 };
@@ -524,6 +536,7 @@ static struct attribute *net_class_attrs[] __ro_after_init = {
        &dev_attr_speed.attr,
        &dev_attr_duplex.attr,
        &dev_attr_dormant.attr,
+       &dev_attr_testing.attr,
        &dev_attr_operstate.attr,
        &dev_attr_carrier_changes.attr,
        &dev_attr_ifalias.attr,