From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 1C4035ABE for ; Tue, 27 Jan 2015 18:20:02 +0100 (CET) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 27 Jan 2015 09:20:01 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,475,1418112000"; d="scan'208";a="643360033" Received: from unknown (HELO Sent) ([10.217.248.194]) by orsmga001.jf.intel.com with SMTP; 27 Jan 2015 09:19:59 -0800 Received: by Sent (sSMTP sendmail emulation); Tue, 27 Jan 2015 18:19:57 +0200 From: Michal Jastrzebski To: dev@dpdk.org Date: Tue, 27 Jan 2015 18:19:35 +0100 Message-Id: <1422379175-10004-1-git-send-email-michalx.k.jastrzebski@intel.com> X-Mailer: git-send-email 2.1.1 Subject: [dpdk-dev] [PATCH v2] testpmd check return value of rte_eth_dev_vlan_filter() X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Jan 2015 17:20:04 -0000 This patch modifies testpmd behavior when setting: rx_vlan add all vf_port (enabling all vlanids to be passed thru rx filter on VF). Rx_vlan_all_filter_set() function, checks if the next vlanid can be enabled by the driver. Number of vlanids is limited by the NIC and thus the NIC do not allow to enable more vlanids than it can allocate in VFTA table. v2 - fix formatting errors Signed-off-by: Michal Jastrzebski --- app/test-pmd/config.c | 15 +++++++++------ app/test-pmd/testpmd.h | 2 +- lib/librte_ether/rte_ethdev.c | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index c40f819..eda737e 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1643,21 +1643,22 @@ rx_vlan_filter_set(portid_t port_id, int on) "diag=%d\n", port_id, on, diag); } -void +int rx_vft_set(portid_t port_id, uint16_t vlan_id, int on) { int diag; if (port_id_is_invalid(port_id)) - return; + return 1; if (vlan_id_is_invalid(vlan_id)) - return; + return 1; diag = rte_eth_dev_vlan_filter(port_id, vlan_id, on); if (diag == 0) - return; + return 0; printf("rte_eth_dev_vlan_filter(port_pi=%d, vlan_id=%d, on=%d) failed " "diag=%d\n", port_id, vlan_id, on, diag); + return -1; } void @@ -1667,8 +1668,10 @@ rx_vlan_all_filter_set(portid_t port_id, int on) if (port_id_is_invalid(port_id)) return; - for (vlan_id = 0; vlan_id < 4096; vlan_id++) - rx_vft_set(port_id, vlan_id, on); + for (vlan_id = 0; vlan_id < 4096; vlan_id++) { + if (rx_vft_set(port_id, vlan_id, on)) + break; + } } void diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 8f5e6c7..e0186b9 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -492,7 +492,7 @@ void rx_vlan_strip_set_on_queue(portid_t port_id, uint16_t queue_id, int on); void rx_vlan_filter_set(portid_t port_id, int on); void rx_vlan_all_filter_set(portid_t port_id, int on); -void rx_vft_set(portid_t port_id, uint16_t vlan_id, int on); +int rx_vft_set(portid_t port_id, uint16_t vlan_id, int on); void vlan_extend_set(portid_t port_id, int on); void vlan_tpid_set(portid_t port_id, uint16_t tp_id); void tx_vlan_set(portid_t port_id, uint16_t vlan_id); diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index ea3a1fb..064b5d6 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -1519,8 +1519,8 @@ rte_eth_dev_vlan_filter(uint8_t port_id, uint16_t vlan_id, int on) return (-EINVAL); } FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_filter_set, -ENOTSUP); - (*dev->dev_ops->vlan_filter_set)(dev, vlan_id, on); - return (0); + + return (*dev->dev_ops->vlan_filter_set)(dev, vlan_id, on); } int -- 1.7.9.5