Patchwork virtio_net: implements ethtool_ops.get_drvinfo

login
register
mail settings
Submitter Rusty Russell
Date Aug. 5, 2010, 3:32 a.m.
Message ID <201008051302.06045.rusty@rustcorp.com.au>
Download mbox | patch
Permalink /patch/60921/
State Accepted
Delegated to: David Miller
Headers show

Comments

Rusty Russell - Aug. 5, 2010, 3:32 a.m.
I often use "ethtool -i" command to check what driver controls the
ehternet device.  But because current virtio_net driver doesn't
support "ethtool -i", it becomes the following:

        # ethtool -i eth3
        Cannot get driver information: Operation not supported

This patch simply adds the "ethtool -i" support. The following is the
result when using the virtio_net driver with my patch applied to.

        # ethtool -i eth3
        driver: virtio_net
        version: N/A
        firmware-version: N/A
        bus-info: virtio0

Personally, "-i" is one of the most frequently-used option, and most
network drivers support "ethtool -i", so I think virtio_net also
should do.

Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (use ARRAY_SIZE)
---
 drivers/net/virtio_net.c |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

--
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
Ben Hutchings - Aug. 5, 2010, 3:47 a.m.
On Thu, 2010-08-05 at 13:02 +0930, Rusty Russell wrote:
> I often use "ethtool -i" command to check what driver controls the
> ehternet device.  But because current virtio_net driver doesn't
> support "ethtool -i", it becomes the following:
> 
>         # ethtool -i eth3
>         Cannot get driver information: Operation not supported
> 
> This patch simply adds the "ethtool -i" support. The following is the
> result when using the virtio_net driver with my patch applied to.
> 
>         # ethtool -i eth3
>         driver: virtio_net
>         version: N/A
>         firmware-version: N/A
>         bus-info: virtio0
> 
> Personally, "-i" is one of the most frequently-used option, and most
> network drivers support "ethtool -i", so I think virtio_net also
> should do.
[...]

This information is already available generically through sysfs:
    basename $(readlink /sys/class/net/eth3/device)
    basename $(readlink /sys/class/net/eth3/device/driver)

Given that, we should either recommend that people use that method
instead, or we should add an equivalent default implementation of the
get_drvinfo operation.

Ben.
David Miller - Aug. 5, 2010, 4:54 a.m.
From: Ben Hutchings <bhutchings@solarflare.com>
Date: Thu, 05 Aug 2010 04:47:21 +0100

> On Thu, 2010-08-05 at 13:02 +0930, Rusty Russell wrote:
>> I often use "ethtool -i" command to check what driver controls the
>> ehternet device.  But because current virtio_net driver doesn't
>> support "ethtool -i", it becomes the following:
>> 
>>         # ethtool -i eth3
>>         Cannot get driver information: Operation not supported
>> 
>> This patch simply adds the "ethtool -i" support. The following is the
>> result when using the virtio_net driver with my patch applied to.
>> 
>>         # ethtool -i eth3
>>         driver: virtio_net
>>         version: N/A
>>         firmware-version: N/A
>>         bus-info: virtio0
>> 
>> Personally, "-i" is one of the most frequently-used option, and most
>> network drivers support "ethtool -i", so I think virtio_net also
>> should do.
> [...]
> 
> This information is already available generically through sysfs:
>     basename $(readlink /sys/class/net/eth3/device)
>     basename $(readlink /sys/class/net/eth3/device/driver)
> 
> Given that, we should either recommend that people use that method
> instead, or we should add an equivalent default implementation of the
> get_drvinfo operation.

We've had ethtool for nearly a decade, it's a standard facility and
it's only wise to have all drivers implement as much of the API as
possible.

As such I've applied Rusty's patch and I will apply any patch which
makes a driver more fully provide support for all ethtool facilities.
--
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
Loke, Chetan - Aug. 6, 2010, 3:59 p.m.
> This information is already available generically through sysfs:

>     basename $(readlink /sys/class/net/eth3/device)

>     basename $(readlink /sys/class/net/eth3/device/driver)

> 

> Given that, we should either recommend that people use that method

> instead


sysfs-rules.txt::"Accessing /sys/class/net/eth0/device is a bug in the application."

I understand Dave has accepted the patch already(which is perfect). I'm not being sarcastic but I really want to understand if I can access these nodes.


Chetan Loke
Ben Hutchings - Aug. 6, 2010, 4:15 p.m.
On Fri, 2010-08-06 at 11:59 -0400, Loke, Chetan wrote:
> > This information is already available generically through sysfs:
> >     basename $(readlink /sys/class/net/eth3/device)
> >     basename $(readlink /sys/class/net/eth3/device/driver)
> > 
> > Given that, we should either recommend that people use that method
> > instead
> 
> sysfs-rules.txt::"Accessing /sys/class/net/eth0/device is a bug in the application."
> 
> I understand Dave has accepted the patch already(which is perfect).
> I'm not being sarcastic but I really want to understand if I can
> access these nodes.

You should probably believe that document rather than me.

Ben.

Patch

Index: net-next.35/drivers/net/virtio_net.c
===================================================================
--- net-next.35.orig/drivers/net/virtio_net.c
+++ net-next.35/drivers/net/virtio_net.c
@@ -701,6 +701,19 @@  static int virtnet_close(struct net_devi
 	return 0;
 }
 
+static void virtnet_get_drvinfo(struct net_device *dev,
+				struct ethtool_drvinfo *drvinfo)
+{
+	struct virtnet_info *vi = netdev_priv(dev);
+	struct virtio_device *vdev = vi->vdev;
+
+	strncpy(drvinfo->driver, KBUILD_MODNAME, ARRAY_SIZE(drvinfo->driver));
+	strncpy(drvinfo->version, "N/A", ARRAY_SIZE(drvinfo->version));
+	strncpy(drvinfo->fw_version, "N/A", ARRAY_SIZE(drvinfo->fw_version));
+	strncpy(drvinfo->bus_info, dev_name(&vdev->dev),
+		ARRAY_SIZE(drvinfo->bus_info));
+}
+
 static int virtnet_set_tx_csum(struct net_device *dev, u32 data)
 {
 	struct virtnet_info *vi = netdev_priv(dev);
@@ -813,6 +825,7 @@  static void virtnet_vlan_rx_kill_vid(str
 }
 
 static const struct ethtool_ops virtnet_ethtool_ops = {
+	.get_drvinfo = virtnet_get_drvinfo,
 	.set_tx_csum = virtnet_set_tx_csum,
 	.set_sg = ethtool_op_set_sg,
 	.set_tso = ethtool_op_set_tso,