system-linux: re-apply ethtool on phy attachment
authorDaniel Golle <daniel@makrotopia.org>
Fri, 5 Jul 2024 18:15:10 +0000 (19:15 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Fri, 5 Jul 2024 18:40:28 +0000 (19:40 +0100)
ethtool settings applied before the interface is in IFF_UP state
are going to be lost when phylink is being used.
This is the case with many modern NICs as well as when using SFP
modules, resulting in the speed, duplex, *pause and autoneg
settings not having any effect.

Reapply ethtool settings once the PHY is attached.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
system-linux.c

index 4463a2a8282a1151cb99734d65dd57689a7fad52..58c737337be3e38001018aa3301cd87750fa2011 100644 (file)
@@ -701,6 +701,9 @@ static int system_get_arp_accept(struct device *dev, char *buf, const size_t buf
 #define IFF_LOWER_UP   0x10000
 #endif
 
+static void
+system_set_ethtool_settings(struct device *dev, struct device_settings *s);
+
 static void
 system_device_update_state(struct device *dev, unsigned int flags, unsigned int ifindex)
 {
@@ -711,6 +714,9 @@ system_device_update_state(struct device *dev, unsigned int flags, unsigned int
                device_set_present(dev, ifindex > 0);
        }
        device_set_link(dev, flags & IFF_LOWER_UP ? true : false);
+
+       if ((flags & IFF_UP) && !(flags & IFF_LOWER_UP))
+               system_set_ethtool_settings(dev, &dev->settings);
 }
 
 /* Evaluate netlink messages */