From: Sven Eckelmann <s...@narfation.org>

[ Upstream commit 9ad346c90509ebd983f60da7d082f261ad329507 ]

The commit 8c46fcd78308 ("batman-adv: disable ethtool link speed detection
when auto negotiation off") disabled the usage of ethtool's link_ksetting
when auto negotation was enabled due to invalid values when used with
tun/tap virtual net_devices. According to the patch, automatic measurements
should be used for these kind of interfaces.

But there are major flaws with this argumentation:

* automatic measurements are not implemented
* auto negotiation has nothing to do with the validity of the retrieved
  values

The first point has to be fixed by a longer patch series. The "validity"
part of the second point must be addressed in the same patch series by
dropping the usage of ethtool's link_ksetting (thus always doing automatic
measurements over ethernet).

Drop the patch again to have more default values for various net_device
types/configurations. The user can still overwrite them using the
batadv_hardif's BATADV_ATTR_THROUGHPUT_OVERRIDE.

Reported-by: Matthias Schiffer <mschif...@universe-factory.net>
Signed-off-by: Sven Eckelmann <s...@narfation.org>
Signed-off-by: Simon Wunderlich <s...@simonwunderlich.de>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 net/batman-adv/bat_v_elp.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c
index 1e3172db7492..955e0b8960d6 100644
--- a/net/batman-adv/bat_v_elp.c
+++ b/net/batman-adv/bat_v_elp.c
@@ -127,20 +127,7 @@ static u32 batadv_v_elp_get_throughput(struct 
batadv_hardif_neigh_node *neigh)
        rtnl_lock();
        ret = __ethtool_get_link_ksettings(hard_iface->net_dev, &link_settings);
        rtnl_unlock();
-
-       /* Virtual interface drivers such as tun / tap interfaces, VLAN, etc
-        * tend to initialize the interface throughput with some value for the
-        * sake of having a throughput number to export via ethtool. This
-        * exported throughput leaves batman-adv to conclude the interface
-        * throughput is genuine (reflecting reality), thus no measurements
-        * are necessary.
-        *
-        * Based on the observation that those interface types also tend to set
-        * the link auto-negotiation to 'off', batman-adv shall check this
-        * setting to differentiate between genuine link throughput information
-        * and placeholders installed by virtual interfaces.
-        */
-       if (ret == 0 && link_settings.base.autoneg == AUTONEG_ENABLE) {
+       if (ret == 0) {
                /* link characteristics might change over time */
                if (link_settings.base.duplex == DUPLEX_FULL)
                        hard_iface->bat_v.flags |= BATADV_FULL_DUPLEX;
-- 
2.25.1

Reply via email to