kni: support minimal ethtool
authorStephen Hemminger <stephen@networkplumber.org>
Mon, 24 Jun 2019 16:47:13 +0000 (09:47 -0700)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 15 Jul 2019 17:15:56 +0000 (19:15 +0200)
Some applications use ethtool so add the minimum ethtool ops.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
kernel/linux/kni/kni_dev.h
kernel/linux/kni/kni_misc.c
kernel/linux/kni/kni_net.c

index ceba5f7..c1ca678 100644 (file)
@@ -11,6 +11,8 @@
 #endif
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#define KNI_VERSION    "1.0"
+
 #include "compat.h"
 
 #include <linux/if.h>
index be45f82..2b75502 100644 (file)
@@ -21,6 +21,7 @@
 #include "compat.h"
 #include "kni_dev.h"
 
+MODULE_VERSION(KNI_VERSION);
 MODULE_LICENSE("Dual BSD/GPL");
 MODULE_AUTHOR("Intel Corporation");
 MODULE_DESCRIPTION("Kernel Module for managing kni devices");
index 320d51d..319ee2d 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/version.h>
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h> /* eth_type_trans */
+#include <linux/ethtool.h>
 #include <linux/skbuff.h>
 #include <linux/kthread.h>
 #include <linux/delay.h>
@@ -725,6 +726,18 @@ static const struct net_device_ops kni_net_netdev_ops = {
 #endif
 };
 
+static void kni_get_drvinfo(struct net_device *dev,
+                           struct ethtool_drvinfo *info)
+{
+       strlcpy(info->version, KNI_VERSION, sizeof(info->version));
+       strlcpy(info->driver, "kni", sizeof(info->driver));
+}
+
+static const struct ethtool_ops kni_net_ethtool_ops = {
+       .get_drvinfo    = kni_get_drvinfo,
+       .get_link       = ethtool_op_get_link,
+};
+
 void
 kni_net_init(struct net_device *dev)
 {
@@ -736,6 +749,7 @@ kni_net_init(struct net_device *dev)
        ether_setup(dev); /* assign some of the fields */
        dev->netdev_ops      = &kni_net_netdev_ops;
        dev->header_ops      = &kni_net_header_ops;
+       dev->ethtool_ops     = &kni_net_ethtool_ops;
        dev->watchdog_timeo = WD_TIMEOUT;
 }