It allows inspecting link parameters using ethtool. Signed-off-by: Igor Ryzhov <iryz...@nfware.com> --- kernel/linux/kni/kni_net.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/kernel/linux/kni/kni_net.c b/kernel/linux/kni/kni_net.c index 611719b5ee27..931b9daf104f 100644 --- a/kernel/linux/kni/kni_net.c +++ b/kernel/linux/kni/kni_net.c @@ -820,9 +820,34 @@ static void kni_get_drvinfo(struct net_device *dev, strlcpy(info->driver, "kni", sizeof(info->driver)); } +#ifdef ETHTOOL_GLINKSETTINGS +static int kni_get_link_ksettings(struct net_device *dev, + struct ethtool_link_ksettings *settings) +{ + struct kni_dev *kni = netdev_priv(dev); + + settings->base.port = PORT_OTHER; + + if (netif_carrier_ok(dev)) { + settings->base.speed = kni->speed; + settings->base.duplex = kni->duplex; + settings->base.autoneg = kni->autoneg; + } else { + settings->base.speed = SPEED_UNKNOWN; + settings->base.duplex = DUPLEX_UNKNOWN; + settings->base.autoneg = AUTONEG_ENABLE; + } + + return 0; +} +#endif + static const struct ethtool_ops kni_net_ethtool_ops = { .get_drvinfo = kni_get_drvinfo, .get_link = ethtool_op_get_link, +#ifdef ETHTOOL_GLINKSETTINGS + .get_link_ksettings = kni_get_link_ksettings, +#endif }; void -- 2.33.0