system-linux: switch to new ETHTOOL_xLINKSETTINGS API
authorRuiwei Chen <crwbak@gmail.com>
Sat, 25 Mar 2023 05:44:53 +0000 (13:44 +0800)
committerDaniel Golle <daniel@makrotopia.org>
Thu, 31 Aug 2023 20:39:02 +0000 (21:39 +0100)
commitf429bd94f99e55548bf4fa8156c165017ce3c41c
tree4fa346af07091a2a17abfd02caa00d98e5c78cf8
parentdb3934d2f740bdfe8537933741f71b439a109422
system-linux: switch to new ETHTOOL_xLINKSETTINGS API

ETHTOOL_GSET / ETHTOOL_SSET API is deprecated since Linux v5.2
released in 2016, see torvalds/linux@3f1ac7a700d03 ("net: ethtool: add
new ETHTOOL_xLINKSETTINGS API"). All still maintained OpenWrt versions
use kernel versions new enough to support the new API.

Hence migrate to ETHTOOL_xLINKSETTINGS API API to handle
auto-negotiation for flow-control as well as higher bandwidth like
2.5G, 5G and 10G.

Use ethtool API to switch on or off auto-negotiation of Ethernet
interfaces, and set speed and duplex accordingly in case auto-
negotiation is switched off.

Add support for flow-control settings, both manual/force mode for
RX and TX pause frames as well as advertising Pause and Asym_Pause
bits.

Instead of hard-coding the supported modes, generate a header file
describing them from <linux/ethtool.h>.

Signed-off-by: Ruiwei Chen <crwbak@gmail.com>
[generate list of link modes from toolchain headers, select by speed
and duplex, also use new API for dump function, add support for flow-
control settings]
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
CMakeLists.txt
device.c
device.h
make_ethtool_modes_h.sh [new file with mode: 0755]
system-linux.c