ethtool-util: drop use of deprecated ETHTOOL_GSET and ETHTOOL_SSET

The methods are deprecated since kernel v4.20,
9b30049535
and they are trivial wrapper of ETHTOOL_GLINKSETTINGS and ETHTOOL_SLINKSETTINGS,
respectively. Hence, the fallback logic is nowadays completely
meaningless. Let's drop them.
This commit is contained in:
Yu Watanabe
2025-09-02 10:21:51 +09:00
parent 4feade85d7
commit 5505c528b9

View File

@@ -704,45 +704,6 @@ static int get_glinksettings(int fd, struct ifreq *ifr, union ethtool_link_usett
return 0;
}
static int get_gset(int fd, struct ifreq *ifr, union ethtool_link_usettings **ret) {
struct ethtool_cmd ecmd = {
.cmd = ETHTOOL_GSET,
};
assert(fd >= 0);
assert(ifr);
assert(ret);
ifr->ifr_data = (void *) &ecmd;
if (ioctl(fd, SIOCETHTOOL, ifr) < 0)
return -errno;
union ethtool_link_usettings *u = new(union ethtool_link_usettings, 1);
if (!u)
return -ENOMEM;
*u = (union ethtool_link_usettings) {
.base.cmd = ETHTOOL_GSET,
.base.link_mode_masks_nwords = 1,
.base.speed = ethtool_cmd_speed(&ecmd),
.base.duplex = ecmd.duplex,
.base.port = ecmd.port,
.base.phy_address = ecmd.phy_address,
.base.autoneg = ecmd.autoneg,
.base.mdio_support = ecmd.mdio_support,
.base.eth_tp_mdix = ecmd.eth_tp_mdix,
.base.eth_tp_mdix_ctrl = ecmd.eth_tp_mdix_ctrl,
};
u->link_modes.supported[0] = ecmd.supported;
u->link_modes.advertising[0] = ecmd.advertising;
u->link_modes.lp_advertising[0] = ecmd.lp_advertising;
*ret = u;
return 0;
}
static int set_slinksettings(int fd, struct ifreq *ifr, const union ethtool_link_usettings *u) {
assert(fd >= 0);
assert(ifr);
@@ -764,37 +725,6 @@ static int set_slinksettings(int fd, struct ifreq *ifr, const union ethtool_link
return RET_NERRNO(ioctl(fd, SIOCETHTOOL, ifr));
}
static int set_sset(int fd, struct ifreq *ifr, const union ethtool_link_usettings *u) {
struct ethtool_cmd ecmd = {
.cmd = ETHTOOL_SSET,
};
assert(fd >= 0);
assert(ifr);
assert(u);
if (u->base.cmd != ETHTOOL_GSET || u->base.link_mode_masks_nwords <= 0)
return -EINVAL;
ecmd.supported = u->link_modes.supported[0];
ecmd.advertising = u->link_modes.advertising[0];
ecmd.lp_advertising = u->link_modes.lp_advertising[0];
ethtool_cmd_speed_set(&ecmd, u->base.speed);
ecmd.duplex = u->base.duplex;
ecmd.port = u->base.port;
ecmd.phy_address = u->base.phy_address;
ecmd.autoneg = u->base.autoneg;
ecmd.mdio_support = u->base.mdio_support;
ecmd.eth_tp_mdix = u->base.eth_tp_mdix;
ecmd.eth_tp_mdix_ctrl = u->base.eth_tp_mdix_ctrl;
ifr->ifr_data = (void *) &ecmd;
return RET_NERRNO(ioctl(fd, SIOCETHTOOL, ifr));
}
int ethtool_set_glinksettings(
int *fd,
const char *ifname,
@@ -843,11 +773,8 @@ int ethtool_set_glinksettings(
strscpy(ifr.ifr_name, sizeof(ifr.ifr_name), ifname);
r = get_glinksettings(*fd, &ifr, &u);
if (r < 0) {
r = get_gset(*fd, &ifr, &u);
if (r < 0)
return log_debug_errno(r, "ethtool: Cannot get device settings for %s: %m", ifname);
}
if (r < 0)
return log_debug_errno(r, "ethtool: Cannot get device settings for %s: %m", ifname);
if (speed > 0)
UPDATE(u->base.speed, DIV_ROUND_UP(speed, 1000000), changed);
@@ -883,10 +810,7 @@ int ethtool_set_glinksettings(
if (!changed)
return 0;
if (u->base.cmd == ETHTOOL_GLINKSETTINGS)
r = set_slinksettings(*fd, &ifr, u);
else
r = set_sset(*fd, &ifr, u);
r = set_slinksettings(*fd, &ifr, u);
if (r < 0)
return log_debug_errno(r, "ethtool: Cannot set device settings for %s: %m", ifname);