Similar to speed, duplex and dorment, report the testing status
in sysfs.

Signed-off-by: Andrew Lunn <[email protected]>
---
 Documentation/ABI/testing/sysfs-class-net | 13 +++++++++++++
 net/core/net-sysfs.c                      | 15 ++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/Documentation/ABI/testing/sysfs-class-net 
b/Documentation/ABI/testing/sysfs-class-net
index 664a8f6a634f..5e8b09743e04 100644
--- a/Documentation/ABI/testing/sysfs-class-net
+++ b/Documentation/ABI/testing/sysfs-class-net
@@ -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:          Jun 2019
+KernelVersion: 5.2
+Contact:       [email protected]
+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
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 865ba6ca16eb..cab26358e347 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -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,
-- 
2.20.1

Reply via email to