Skip to contentSkip to conversation

virtio_net: implements ethtool_ops.get_drvinfo

PATCH In review Taku Izumi 2 participants 4 messages Jun 11, 2010 – Jun 16, 2010

Subsystems (3)
lore
Share & tools
lore

Taku Izumi

author
#0 lore raw

PATCH 1/1 virtio_net: implements ethtool_ops.get_drvinfo

This patch implements ethtool_ops.get_drvinfo interface of virtio_net driver.

---
 drivers/net/virtio_net.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)
drivers/net/virtio_net.c +13 -0
Index: net-next.35/drivers/net/virtio_net.c
===================================================================
@@ -701,6 +701,18 @@ 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, 32);
+	strncpy(drvinfo->version, "N/A", 32);
+	strncpy(drvinfo->fw_version, "N/A", 32);
+	strncpy(drvinfo->bus_info, dev_name(&vdev->dev), 32);
+}
+
 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,
#1 lore raw
Quoted 3 lines · Taku Izumi

This patch implements ethtool_ops.get_drvinfo interface of virtio_net driver.

Hi Taku!

Does this have any useful effect?

Thanks,
Rusty.

Quoted 36 lines
---
 drivers/net/virtio_net.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

Index: net-next.35/drivers/net/virtio_net.c
===================================================================

drivers/net/virtio_net.c +13 -0
@@ -701,6 +701,18 @@ 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, 32);
+	strncpy(drvinfo->version, "N/A", 32);
+	strncpy(drvinfo->fw_version, "N/A", 32);
+	strncpy(drvinfo->bus_info, dev_name(&vdev->dev), 32);
+}
+
 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,
author
#2 lore raw

Hi Rusty,

Quoted 8 lines · Rusty Russell
Quoted 3 lines · Taku Izumi

This patch implements ethtool_ops.get_drvinfo interface of virtio_net driver.

Hi Taku!

Does this have any useful effect?

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

My 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.

Taku Izumi <[email protected]>

#3 lore raw
Quoted 22 lines · Taku Izumi

Hi Rusty,

Quoted 8 lines · Rusty Russell
Quoted 3 lines · Taku Izumi

This patch implements ethtool_ops.get_drvinfo interface of virtio_net driver.

Hi Taku!

Does this have any useful effect?

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

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

Quoted 8 lines
	# 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.

Thanks, Taku.

I put this explanation in the commit message, and changed 32 to ARRAY_SIZE(). It's queued for sending to DaveM for the next merge window.

Result below.

Thanks!
Rusty.

Subject: virtio_net: implements ethtool_ops.get_drvinfo
Date: Fri, 11 Jun 2010 10:29:02 +0900
From: Taku Izumi <[email protected]>

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.

---

 0 files changed
drivers/net/virtio_net.c +14 -0
Index: 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,