]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
xen/netloop: add get_drvinfo() ("ethtool -i") support
authorKeir Fraser <keir@xen.org>
Fri, 29 Oct 2010 09:23:16 +0000 (10:23 +0100)
committerKeir Fraser <keir@xen.org>
Fri, 29 Oct 2010 09:23:16 +0000 (10:23 +0100)
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
drivers/xen/netback/loopback.c

index d1a03b6fc2d9452d287ad75ebf15c66c3b63a9b2..9d1839ab7d2d6bca3121f001638b2106ff993f04 100644 (file)
@@ -62,6 +62,7 @@ MODULE_PARM_DESC(nloopbacks, "Number of netback-loopback devices to create");
 struct net_private {
        struct net_device *loopback_dev;
        struct net_device_stats stats;
+       int loop_idx;
 };
 
 static int loopback_open(struct net_device *dev)
@@ -181,8 +182,17 @@ static struct net_device_stats *loopback_get_stats(struct net_device *dev)
        return &np->stats;
 }
 
+static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
+{
+       strcpy(info->driver, "netloop");
+       snprintf(info->bus_info, ETHTOOL_BUSINFO_LEN, "vif-0-%d",
+                ((struct net_private *)netdev_priv(dev))->loop_idx);
+}
+
 static struct ethtool_ops network_ethtool_ops =
 {
+       .get_drvinfo = get_drvinfo,
+
        .get_tx_csum = ethtool_op_get_tx_csum,
        .set_tx_csum = ethtool_op_set_tx_csum,
        .get_sg = ethtool_op_get_sg,
@@ -200,11 +210,13 @@ static void loopback_set_multicast_list(struct net_device *dev)
 {
 }
 
-static void loopback_construct(struct net_device *dev, struct net_device *lo)
+static void loopback_construct(struct net_device *dev, struct net_device *lo,
+                              int loop_idx)
 {
        struct net_private *np = netdev_priv(dev);
 
        np->loopback_dev     = lo;
+       np->loop_idx         = loop_idx;
 
        dev->open            = loopback_open;
        dev->stop            = loopback_close;
@@ -250,8 +262,8 @@ static int __init make_loopback(int i)
        if (!dev2)
                goto fail_netdev2;
 
-       loopback_construct(dev1, dev2);
-       loopback_construct(dev2, dev1);
+       loopback_construct(dev1, dev2, i);
+       loopback_construct(dev2, dev1, i);
 
        /*
         * Initialise a dummy MAC address for the 'dummy backend' interface. We