Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp1039134ybc; Tue, 12 Nov 2019 13:14:54 -0800 (PST) X-Google-Smtp-Source: APXvYqzsF1S1zTB0i9cpwwIT0zg5bwHTLbkyCcqe76mTaCHQOvdeGDj7yvlyBXdC3vfOcCsR3elg X-Received: by 2002:a50:ec83:: with SMTP id e3mr35594115edr.292.1573593294180; Tue, 12 Nov 2019 13:14:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573593294; cv=none; d=google.com; s=arc-20160816; b=SusuG1IxAj8rcIoEi2AJwQYqNIhX9w8GPzR8atlT1ekGZakwHr9gpNQTl2BspNOLHo DOiCRU3pnWOOhV2x/AJEG+zq716AuE9Gm5It5qNFbGcuj6i4ZgM08VDy4aGdJ/9CoPR7 sFxRjX1fJxu2NJAligAExnDFwyPrN3HMZKcsQwDzjPuS6N590bJ9PM6hI61ULm/7phqh yljeuJeQcF9JU9aD7zTSHM9UUSNpHvyN8xv9juS1B9Y0TtujKP3je/J2extveAbMlyDD puYDwDm/LB0OHbI0KM+Hww/Bqee1s29e90s6DyXsVf9/CmunOkG9RQUVVE6rgXZbeCNY AzXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ys8pkxUZDN4FE2dpqAnQR4Yd39oX7cS0Wxg9sukGSKg=; b=hFpAoS4N8Kpu20X9R3xsKgFulMny4Nmmno/FXi49fDBdcEIuwgbWxC6g2khOenhv8K TlfSjAehTs8RDq5E5BtedZtlq7GzEGEifkLJ+kUvK2d/HWB879nMTJVF7tmgaLoPsni7 KFkK+fbGyboox07A3uwFn7pVGfCBwgS2QdyLyrKxI6i4McwtCn0qXPPiGm2ec7A0xrCh kK3uhvSJ4rTjPDn6cqHUSzJlaQ224DkaDAG0gq8oL93RVcvG9IM9wr4nDsiqYFplkZkr 7bUtZkXfBCokb2DGB05tMOJW6L+ONTh571b1fX7Drgq1+CNtEkm2Vf0DRDa4n+UNDhsk Z8bQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id rv19si849216ejb.91.2019.11.12.13.14.29; Tue, 12 Nov 2019 13:14:54 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727413AbfKLVMc (ORCPT + 99 others); Tue, 12 Nov 2019 16:12:32 -0500 Received: from orthanc.universe-factory.net ([104.238.176.138]:40928 "EHLO orthanc.universe-factory.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726936AbfKLVMc (ORCPT ); Tue, 12 Nov 2019 16:12:32 -0500 Received: from localhost.localdomain (unknown [IPv6:2001:19f0:6c01:100::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by orthanc.universe-factory.net (Postfix) with ESMTPSA id 9BB231F570; Tue, 12 Nov 2019 22:12:30 +0100 (CET) From: Matthias Schiffer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, davem@davemloft.net, roopa@cumulusnetworks.com, nikolay@cumulusnetworks.com, Matthias Schiffer Subject: [PATCH net-next v2 2/2] bridge: implement get_link_ksettings ethtool method Date: Tue, 12 Nov 2019 22:12:25 +0100 Message-Id: X-Mailer: git-send-email 2.24.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We return the maximum speed of all active ports. This matches how the link speed would give an upper limit for traffic to/from any single peer if the bridge were replaced with a hardware switch. Signed-off-by: Matthias Schiffer --- v2: code style net/bridge/br_device.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index e804a3016902..434effde02c3 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -263,6 +263,37 @@ static void br_getinfo(struct net_device *dev, struct ethtool_drvinfo *info) strlcpy(info->bus_info, "N/A", sizeof(info->bus_info)); } +static int br_get_link_ksettings(struct net_device *dev, + struct ethtool_link_ksettings *cmd) +{ + struct net_bridge *br = netdev_priv(dev); + struct net_bridge_port *p; + + cmd->base.duplex = DUPLEX_UNKNOWN; + cmd->base.port = PORT_OTHER; + cmd->base.speed = SPEED_UNKNOWN; + + list_for_each_entry(p, &br->port_list, list) { + struct ethtool_link_ksettings ecmd; + struct net_device *pdev = p->dev; + + if (!netif_running(pdev) || !netif_oper_up(pdev)) + continue; + + if (__ethtool_get_link_ksettings(pdev, &ecmd)) + continue; + + if (ecmd.base.speed == (__u32)SPEED_UNKNOWN) + continue; + + if (cmd->base.speed == (__u32)SPEED_UNKNOWN || + cmd->base.speed < ecmd.base.speed) + cmd->base.speed = ecmd.base.speed; + } + + return 0; +} + static netdev_features_t br_fix_features(struct net_device *dev, netdev_features_t features) { @@ -365,8 +396,9 @@ static int br_del_slave(struct net_device *dev, struct net_device *slave_dev) } static const struct ethtool_ops br_ethtool_ops = { - .get_drvinfo = br_getinfo, - .get_link = ethtool_op_get_link, + .get_drvinfo = br_getinfo, + .get_link = ethtool_op_get_link, + .get_link_ksettings = br_get_link_ksettings, }; static const struct net_device_ops br_netdev_ops = { -- 2.24.0