From patchwork Sun Nov 29 23:49:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 549837 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (unknown [IPv6:2600:3c00::f03c:91ff:fe6e:bdf7]) by ozlabs.org (Postfix) with ESMTP id D0AC61401E7 for ; Mon, 30 Nov 2015 10:49:37 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b=gdvAEwO/; dkim-atps=neutral Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 7CAC2106CE; Sun, 29 Nov 2015 15:49:28 -0800 (PST) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx1e4.cudamail.com (mx1.cudamail.com [69.90.118.67]) by archives.nicira.com (Postfix) with ESMTPS id D0CF8106CC for ; Sun, 29 Nov 2015 15:49:26 -0800 (PST) Received: from bar2.cudamail.com (unknown [192.168.21.12]) by mx1e4.cudamail.com (Postfix) with ESMTPS id 5D09F1E0248 for ; Sun, 29 Nov 2015 16:49:26 -0700 (MST) X-ASG-Debug-ID: 1448840965-03dc5307a706710001-byXFYA Received: from mx1-pf1.cudamail.com ([192.168.24.1]) by bar2.cudamail.com with ESMTP id J5TwtEgomHSgBZoy (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 29 Nov 2015 16:49:25 -0700 (MST) X-Barracuda-Envelope-From: simon.horman@netronome.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.24.1 Received: from unknown (HELO mail-pa0-f43.google.com) (209.85.220.43) by mx1-pf1.cudamail.com with ESMTPS (RC4-SHA encrypted); 29 Nov 2015 23:49:24 -0000 Received-SPF: none (mx1-pf1.cudamail.com: domain at netronome.com does not designate permitted sender hosts) X-Barracuda-RBL-Trusted-Forwarder: 209.85.220.43 Received: by pacej9 with SMTP id ej9so164820802pac.2 for ; Sun, 29 Nov 2015 15:49:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=BoNXn2dG8K5XUW1BN9YlciMzSj1H5sUwq5/BboszhyA=; b=gdvAEwO/U+guO/e8KNilcSthsaW52MJc/Ze48k5+O3hbDUBBOimwZ+bTzTW0Gwfpz5 vBUO30RKFuvIcRtUwl06zdca0/gFYFSTkJrMuRb1M+mZhjhPmTadevLiZ8t0UH+Fz0SV VSQ13UIb5jy1mVDQu72W0UqSwH6U5jPymZnc2ABK4GZfViYQBFu+3RsXTXZvplNtpEzg tqzAtuaU6OhkEPubeSCRBPy20MQ3JZ6NNKlbrmmnlI8kQz2y0ecnGJPp/XZzrZ24Cxlg 7+GsAmXr8U69DfSufjEh9SeNh+XCgt2hOdzOhxC+9C/jDFN6kcHDQ15SNpxebyYfaPS1 gxbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=BoNXn2dG8K5XUW1BN9YlciMzSj1H5sUwq5/BboszhyA=; b=ZAuL2zc4tfb7NEL2281U8d7pJkf64fwrZ9962HdJp24IdrQEPnmsvdbakoCYh44eqY OlC6Yq3FcOcjA93rjtcfz1khDl5d2BwFGG5WLR7OResYOe24IXX2zpx2EmRKA6DN9wmE 0hJrSfZ44xei2M0fBjG7ByUnThK5xk2ZGaN/Kfm0NyV57auxil5FbNKd8l9C18Tdk/Sz rZhi0/186z7UV/FHi8/LorE7lwrIEDgizTbw5OrFMDlBhcGXW7bc8n1gdxBXroe+HGsk rH1FAJVa1RLqlfCtr0HrqFUevFhzi06gGIOAcwuWxtJiMAl7JHR3kVAJoBf2XGnYfgjT 2hTQ== X-Gm-Message-State: ALoCoQnGYdAGW644Evv9HbQc6ehWqltuYJS3aaTAg4IXoS1rSQ66/F2AjJGrqCYezzASeUqRdwdi X-Received: by 10.66.158.97 with SMTP id wt1mr85487727pab.155.1448840964203; Sun, 29 Nov 2015 15:49:24 -0800 (PST) Received: from reginn.isobedori.kobe.vergenet.net (p5254-ipbfp1403kobeminato.hyogo.ocn.ne.jp. [114.152.48.254]) by smtp.gmail.com with ESMTPSA id p6sm46849259pfi.20.2015.11.29.15.49.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 29 Nov 2015 15:49:22 -0800 (PST) X-CudaMail-Envelope-Sender: simon.horman@netronome.com X-Barracuda-Apparent-Source-IP: 114.152.48.254 From: Simon Horman To: dev@openvswitch.org X-CudaMail-MID: CM-E1-1128029803 X-CudaMail-DTE: 112915 X-CudaMail-Originating-IP: 209.85.220.43 Date: Mon, 30 Nov 2015 08:49:04 +0900 X-ASG-Orig-Subj: [##CM-E1-1128029803##][PATCH v2 2/2] netdev-linux: Handle flags for 10G and 40G speeds Message-Id: <1448840944-11232-3-git-send-email-simon.horman@netronome.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1448840944-11232-1-git-send-email-simon.horman@netronome.com> References: <1448840944-11232-1-git-send-email-simon.horman@netronome.com> X-GBUdb-Analysis: 0, 209.85.220.43, Ugly c=0.369283 p=-0.555556 Source Normal X-MessageSniffer-Rules: 0-0-0-9932-c X-Barracuda-Connect: UNKNOWN[192.168.24.1] X-Barracuda-Start-Time: 1448840965 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=3.5 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=4.0 tests=BSF_SC5_MJ1963, DKIM_SIGNED, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.24833 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Cc: Simon Horman Subject: [ovs-dev] [PATCH v2 2/2] netdev-linux: Handle flags for 10G and 40G speeds X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" Handle advertised and supported flags for the following speeds: * 1G base KX * 10G base KX4, KR, R * 40G base KR4, CR4, SR4, LR4 Signed-off-by: Simon Horman --- v2 * Extend coverage to 10G base KX for completeness * Include compatibility code as suggested by Ben Pfaff --- lib/netdev-linux.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 1d1a22bf1341..393b4cc8f774 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -151,6 +151,32 @@ static inline uint32_t rpl_ethtool_cmd_speed(const struct ethtool_cmd *ep) return ep->speed | (ep->speed_hi << 16); } +/* Linux 2.6.30 introduced supported and advertised flags for + * 1G base KX, and 10G base KX4, KR and R. */ +#ifndef SUPPORTED_1000baseKX_Full +#define SUPPORTED_1000baseKX_Full (1 << 17) +#define SUPPORTED_10000baseKX4_Full (1 << 18) +#define SUPPORTED_10000baseKR_Full (1 << 19) +#define SUPPORTED_10000baseR_FEC (1 << 20) +#define ADVERTISED_1000baseKX_Full (1 << 17) +#define ADVERTISED_10000baseKX4_Full (1 << 18) +#define ADVERTISED_10000baseKR_Full (1 << 19) +#define ADVERTISED_10000baseR_FEC (1 << 20) +#endif + +/* Linux 3.5 introduced supported and advertised flags for + * 40G base KR4, CR4, SR4 and LR4. */ +#ifndef SUPPORTED_40000baseKR4_Full +#define SUPPORTED_40000baseKR4_Full (1 << 23) +#define SUPPORTED_40000baseCR4_Full (1 << 24) +#define SUPPORTED_40000baseSR4_Full (1 << 25) +#define SUPPORTED_40000baseLR4_Full (1 << 26) +#define ADVERTISED_40000baseKR4_Full (1 << 23) +#define ADVERTISED_40000baseCR4_Full (1 << 24) +#define ADVERTISED_40000baseSR4_Full (1 << 25) +#define ADVERTISED_40000baseLR4_Full (1 << 26) +#endif + /* Linux 2.6.35 introduced IFLA_STATS64 and rtnl_link_stats64. * * Tests for rtnl_link_stats64 don't seem to consistently work, e.g. on @@ -1797,12 +1823,22 @@ netdev_linux_read_features(struct netdev_linux *netdev) if (ecmd.supported & SUPPORTED_1000baseT_Half) { netdev->supported |= NETDEV_F_1GB_HD; } - if (ecmd.supported & SUPPORTED_1000baseT_Full) { + if ((ecmd.supported & SUPPORTED_1000baseT_Full) || + (ecmd.supported & SUPPORTED_1000baseKX_Full)) { netdev->supported |= NETDEV_F_1GB_FD; } - if (ecmd.supported & SUPPORTED_10000baseT_Full) { + if ((ecmd.supported & SUPPORTED_10000baseT_Full) || + (ecmd.supported & SUPPORTED_10000baseKX4_Full) || + (ecmd.supported & SUPPORTED_10000baseKR_Full) || + (ecmd.supported & SUPPORTED_10000baseR_FEC)) { netdev->supported |= NETDEV_F_10GB_FD; } + if ((ecmd.supported & SUPPORTED_40000baseKR4_Full) || + (ecmd.supported & SUPPORTED_40000baseCR4_Full) || + (ecmd.supported & SUPPORTED_40000baseSR4_Full) || + (ecmd.supported & SUPPORTED_40000baseLR4_Full)) { + netdev->supported |= NETDEV_F_40GB_FD; + } if (ecmd.supported & SUPPORTED_TP) { netdev->supported |= NETDEV_F_COPPER; } @@ -1836,12 +1872,22 @@ netdev_linux_read_features(struct netdev_linux *netdev) if (ecmd.advertising & ADVERTISED_1000baseT_Half) { netdev->advertised |= NETDEV_F_1GB_HD; } - if (ecmd.advertising & ADVERTISED_1000baseT_Full) { + if ((ecmd.advertising & ADVERTISED_1000baseT_Full) || + (ecmd.advertising & ADVERTISED_1000baseKX_Full)) { netdev->advertised |= NETDEV_F_1GB_FD; } - if (ecmd.advertising & ADVERTISED_10000baseT_Full) { + if ((ecmd.advertising & ADVERTISED_10000baseT_Full) || + (ecmd.advertising & ADVERTISED_10000baseKX4_Full) || + (ecmd.advertising & ADVERTISED_10000baseKR_Full) || + (ecmd.advertising & ADVERTISED_10000baseR_FEC)) { netdev->advertised |= NETDEV_F_10GB_FD; } + if ((ecmd.advertising & ADVERTISED_40000baseKR4_Full) || + (ecmd.advertising & ADVERTISED_40000baseCR4_Full) || + (ecmd.advertising & ADVERTISED_40000baseSR4_Full) || + (ecmd.advertising & ADVERTISED_40000baseLR4_Full)) { + netdev->advertised |= NETDEV_F_40GB_FD; + } if (ecmd.advertising & ADVERTISED_TP) { netdev->advertised |= NETDEV_F_COPPER; }