ethtool: provide link settings with LINKINFO_GET request
Implement LINKINFO_GET netlink request to get basic link settings provided by ETHTOOL_GLINKSETTINGS and ETHTOOL_GSET ioctl commands. This request provides settings not directly related to autonegotiation and link mode selection: physical port, phy MDIO address, MDI(-X) status, MDI(-X) control and transceiver. LINKINFO_GET request can be used with NLM_F_DUMP (without device identification) to request the information for all devices in current network namespace providing the data. Signed-off-by: Michal Kubecek <mkubecek@suse.cz> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
71921690f9
commit
459e0b81b3
@@ -358,54 +358,6 @@ bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32,
|
||||
}
|
||||
EXPORT_SYMBOL(ethtool_convert_link_mode_to_legacy_u32);
|
||||
|
||||
/* return false if legacy contained non-0 deprecated fields
|
||||
* maxtxpkt/maxrxpkt. rest of ksettings always updated
|
||||
*/
|
||||
static bool
|
||||
convert_legacy_settings_to_link_ksettings(
|
||||
struct ethtool_link_ksettings *link_ksettings,
|
||||
const struct ethtool_cmd *legacy_settings)
|
||||
{
|
||||
bool retval = true;
|
||||
|
||||
memset(link_ksettings, 0, sizeof(*link_ksettings));
|
||||
|
||||
/* This is used to tell users that driver is still using these
|
||||
* deprecated legacy fields, and they should not use
|
||||
* %ETHTOOL_GLINKSETTINGS/%ETHTOOL_SLINKSETTINGS
|
||||
*/
|
||||
if (legacy_settings->maxtxpkt ||
|
||||
legacy_settings->maxrxpkt)
|
||||
retval = false;
|
||||
|
||||
ethtool_convert_legacy_u32_to_link_mode(
|
||||
link_ksettings->link_modes.supported,
|
||||
legacy_settings->supported);
|
||||
ethtool_convert_legacy_u32_to_link_mode(
|
||||
link_ksettings->link_modes.advertising,
|
||||
legacy_settings->advertising);
|
||||
ethtool_convert_legacy_u32_to_link_mode(
|
||||
link_ksettings->link_modes.lp_advertising,
|
||||
legacy_settings->lp_advertising);
|
||||
link_ksettings->base.speed
|
||||
= ethtool_cmd_speed(legacy_settings);
|
||||
link_ksettings->base.duplex
|
||||
= legacy_settings->duplex;
|
||||
link_ksettings->base.port
|
||||
= legacy_settings->port;
|
||||
link_ksettings->base.phy_address
|
||||
= legacy_settings->phy_address;
|
||||
link_ksettings->base.autoneg
|
||||
= legacy_settings->autoneg;
|
||||
link_ksettings->base.mdio_support
|
||||
= legacy_settings->mdio_support;
|
||||
link_ksettings->base.eth_tp_mdix
|
||||
= legacy_settings->eth_tp_mdix;
|
||||
link_ksettings->base.eth_tp_mdix_ctrl
|
||||
= legacy_settings->eth_tp_mdix_ctrl;
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* return false if ksettings link modes had higher bits
|
||||
* set. legacy_settings always updated (best effort)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user