From: Hangbin Liu Date: Mon, 17 Jun 2019 01:32:55 +0000 (+0800) Subject: team: add ethtool get_link_ksettings X-Git-Tag: v5.4-rc1~616^2~216 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9ed68ca0d90b53ba00745cb61ef105599532226f;p=platform%2Fkernel%2Flinux-rpi.git team: add ethtool get_link_ksettings Like bond, add ethtool get_link_ksettings to show the total speed. v2: no update, just repost. Signed-off-by: Hangbin Liu Acked-by: Jiri Pirko Signed-off-by: David S. Miller --- diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index b48006e..f3422f8 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c @@ -2054,9 +2054,34 @@ static void team_ethtool_get_drvinfo(struct net_device *dev, strlcpy(drvinfo->version, UTS_RELEASE, sizeof(drvinfo->version)); } +static int team_ethtool_get_link_ksettings(struct net_device *dev, + struct ethtool_link_ksettings *cmd) +{ + struct team *team= netdev_priv(dev); + unsigned long speed = 0; + struct team_port *port; + + cmd->base.duplex = DUPLEX_UNKNOWN; + cmd->base.port = PORT_OTHER; + + list_for_each_entry(port, &team->port_list, list) { + if (team_port_txable(port)) { + if (port->state.speed != SPEED_UNKNOWN) + speed += port->state.speed; + if (cmd->base.duplex == DUPLEX_UNKNOWN && + port->state.duplex != DUPLEX_UNKNOWN) + cmd->base.duplex = port->state.duplex; + } + } + cmd->base.speed = speed ? : SPEED_UNKNOWN; + + return 0; +} + static const struct ethtool_ops team_ethtool_ops = { .get_drvinfo = team_ethtool_get_drvinfo, .get_link = ethtool_op_get_link, + .get_link_ksettings = team_ethtool_get_link_ksettings, }; /***********************