From patchwork Sun Sep 25 16:06:23 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hill X-Patchwork-Id: 674635 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id 3shsRJ2sdGz9s5w for ; Mon, 26 Sep 2016 02:06:34 +1000 (AEST) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 6199D1026F; Sun, 25 Sep 2016 09:06:31 -0700 (PDT) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx3v3.cudamail.com (mx3.cudamail.com [64.34.241.5]) by archives.nicira.com (Postfix) with ESMTPS id 859A21026C for ; Sun, 25 Sep 2016 09:06:29 -0700 (PDT) Received: from bar6.cudamail.com (localhost [127.0.0.1]) by mx3v3.cudamail.com (Postfix) with ESMTPS id B79041621E8 for ; Sun, 25 Sep 2016 10:06:28 -0600 (MDT) X-ASG-Debug-ID: 1474819587-0b32371ca330c1a0001-byXFYA Received: from mx1-pf2.cudamail.com ([192.168.24.2]) by bar6.cudamail.com with ESMTP id nTvqF3cjN0uAZ7Zd (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 25 Sep 2016 10:06:27 -0600 (MDT) X-Barracuda-Envelope-From: dhill@redhat.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.24.2 Received: from unknown (HELO mail-it0-f41.google.com) (209.85.214.41) by mx1-pf2.cudamail.com with ESMTPS (AES128-SHA encrypted); 25 Sep 2016 16:06:27 -0000 Received-SPF: unknown (mx1-pf2.cudamail.com: parse error in SPF record at _spf1.redhat.com) X-Barracuda-Apparent-Source-IP: 209.85.214.41 X-Barracuda-RBL-IP: 209.85.214.41 Received: by mail-it0-f41.google.com with SMTP id j69so25470779itb.0 for ; Sun, 25 Sep 2016 09:06:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-transfer-encoding; bh=wQ6Z2E0K1nOXMN9h+d3xQO6pgtHD5dehnrm9ZrMn0b4=; b=lK5wj9RpggHQt0i4YXIqXVFOfnhuUGlx7qfDCM/wZVY/HQ3QIW8bzPnX8Nu2jg8qhX Wf3Riq9jLpfyQavfxVRdKFWzhGfe5/3qWpT09B7tvCLatttSPNfsYSaYCX5xnRVk4V4N ATnz9oudUXDSlEOUYeekhIFGgn48LZJx/P9uKY+WzAHUR2ZT6qMDZHuNuozgkgnQkXXS uBGB8sgAPIXJn60Q6u8vpz34516IeizPG51rWZ57vHC6K2zADYdslltfDGvl2mjDNl0l MXUbq12+Of/bYMZzPo0RKsnO1f3wHfB0L2eWuZRpcp+K3n3lNI1lB0MX489kECh0WRRB U86Q== X-Gm-Message-State: AA6/9RlFWEo4wEPKWYYHYpmgtvbXOR9iZrX6ACIE228RvcCVpUxNeoq9JQxKg6FE2FZ73AKg X-Received: by 10.36.40.130 with SMTP id h124mr12619070ith.89.1474819585263; Sun, 25 Sep 2016 09:06:25 -0700 (PDT) Received: from [192.168.1.27] (modemcable090.34-57-74.mc.videotron.ca. [74.57.34.90]) by smtp.gmail.com with ESMTPSA id a192sm2220683itc.8.2016.09.25.09.06.23 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 25 Sep 2016 09:06:24 -0700 (PDT) To: dev@openvswitch.org X-CudaMail-Envelope-Sender: dhill@redhat.com From: David Hill X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-E2-924010440 X-CudaMail-DTE: 092516 X-CudaMail-Originating-IP: 209.85.214.41 Message-ID: <29b6e300-37ed-c880-de09-b8102bc4ae16@redhat.com> X-ASG-Orig-Subj: [##CM-E2-924010440##][PATCH 1/1] Using ethtool on failure using miimon Date: Sun, 25 Sep 2016 12:06:23 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 X-Barracuda-Connect: UNKNOWN[192.168.24.2] X-Barracuda-Start-Time: 1474819587 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 Subject: [ovs-dev] [PATCH 1/1] Using ethtool on failure using miimon 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: , Errors-To: dev-bounces@openvswitch.org Sender: "dev" From 2748f6325facb7d5d880d620041e2f11767abe0c Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 30 Aug 2016 15:13:31 -0400 Subject: [PATCH 1/1] netdev-linux.c - Trying to use miimon and on failure failback to ethtool Some network drivers might return true to SIOCGMIIPHY and an error on SIOCGMIIREG, this patch will simply fallback to ethtool if this happens and failover should still happen on an OVS using such nics. Signed-off-by: David Hill --- lib/netdev-linux.c | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) struct mii_ioctl_data data; @@ -1443,28 +1470,11 @@ netdev_linux_get_miimon(const char *name, bool *miimon) if (!error) { *miimon = !!(data.val_out & BMSR_LSTATUS); - } else { - VLOG_WARN_RL(&rl, "%s: failed to query MII", name); - } - } else { - struct ethtool_cmd ecmd; - - VLOG_DBG_RL(&rl, "%s: failed to query MII, falling back to ethtool", - name); - - COVERAGE_INC(netdev_get_ethtool); - memset(&ecmd, 0, sizeof ecmd); - error = netdev_linux_do_ethtool(name, &ecmd, ETHTOOL_GLINK, - "ETHTOOL_GLINK"); - if (!error) { - struct ethtool_value eval; - - memcpy(&eval, &ecmd, sizeof eval); - *miimon = !!eval.data; - } else { - VLOG_WARN_RL(&rl, "%s: ethtool link status failed", name); } } + if (error) { + error = netdev_linux_get_ethtool(name, miimon); + } return error; } diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index efc9527..05aa91f 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -1426,6 +1426,33 @@ netdev_linux_do_miimon(const char *name, int cmd, const char *cmd_name, } static int +netdev_linux_get_ethtool(const char *name, bool *miimon) +{ + struct mii_ioctl_data data; + int error; + + *miimon = false; + + struct ethtool_cmd ecmd; + VLOG_DBG_RL(&rl, "%s: failed to query MII, falling back to ethtool", + name); + + COVERAGE_INC(netdev_get_ethtool); + memset(&ecmd, 0, sizeof ecmd); + error = netdev_linux_do_ethtool(name, &ecmd, ETHTOOL_GLINK, + "ETHTOOL_GLINK"); + if (!error) { + struct ethtool_value eval; + memcpy(&eval, &ecmd, sizeof eval); + *miimon = !!eval.data; + } else { + VLOG_WARN_RL(&rl, "%s: ethtool link status failed", name); + } + + return error; +} + +static int netdev_linux_get_miimon(const char *name, bool *miimon) {