From 1117bb82cc88048ee3b61509a477ec72a626babf Mon Sep 17 00:00:00 2001 From: Sergey Matov Date: Fri, 14 Oct 2016 11:32:26 +0200 Subject: [PATCH] Added support for kernel 4.6 For 4.6 kernel several ethtool API functions has been removed. If vrouter is building for 4.6 new API should be used instead. Close-bug: #1633387 Change-Id: Ibb83f611616cba952b1ba7da4e548fccd55d0037 --- linux/vr_host_interface.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/linux/vr_host_interface.c b/linux/vr_host_interface.c index 7093d6a34..cc9828a79 100644 --- a/linux/vr_host_interface.c +++ b/linux/vr_host_interface.c @@ -1569,17 +1569,29 @@ linux_if_get_settings(struct vr_interface *vif, rtnl_lock(); if (netif_running(dev)) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)) + /* ethtool_link_ksettings introduced since kernel 4.6. ethtool_cmd has been removed */ + struct ethtool_link_ksettings ekmd; + ekmd.base.cmd = ETHTOOL_GSET; + if (!(ret = __ethtool_get_link_ksettings(dev, &ekmd))) { + settings->vis_speed = ekmd.base.speed; + settings->vis_duplex = ekmd.base.duplex; +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0) && LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)) struct ethtool_cmd cmd; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) - /* As per lxr, this API was introduced in 3.2.0 */ + /* As per lxr, this API was introduced in 3.2.0 */ if (!(ret = __ethtool_get_settings(dev, &cmd))) { settings->vis_speed = ethtool_cmd_speed(&cmd); -#else + settings->vis_duplex = cmd.duplex; +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)) + struct ethtool_cmd cmd; cmd.cmd = ETHTOOL_GSET; if (!(ret = dev_ethtool_get_settings(dev, &cmd))) { settings->vis_speed = cmd.speed; -#endif settings->vis_duplex = cmd.duplex; +#endif + } }