From patchwork Mon Aug 30 02:09:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qiming Chen X-Patchwork-Id: 97521 X-Patchwork-Delegate: qi.z.zhang@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A3A43A0548; Mon, 30 Aug 2021 04:11:24 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 35CB34068A; Mon, 30 Aug 2021 04:11:24 +0200 (CEST) Received: from mail-m972.mail.163.com (mail-m972.mail.163.com [123.126.97.2]) by mails.dpdk.org (Postfix) with ESMTP id 405F940142 for ; Mon, 30 Aug 2021 04:11:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=mcANJ BGb+Wm84eCbc81xeFCnvW0Y4HHo+9dxMXv0+7k=; b=RGFvgktIpMuJQAQBG4oSV CUpQP3m70O7x+MEfUMC76fY1Yr4LSXF5PXmdBvQydGtuAEBq64VYJDK9ObEnlX+w HUF9/r2aEoQzpnH2yiEnibvAfMeMrToouuFnpnab0PLWT1cIX43aEBjJ0ljvSIn4 TaorJrT7hyRRQno6tDSYa0= Received: from localhost.localdomain (unknown [124.160.214.152]) by smtp2 (Coremail) with SMTP id GtxpCgA36dsSPixh4doiQg--.40708S2; Mon, 30 Aug 2021 10:10:28 +0800 (CST) From: Qiming Chen To: dev@dpdk.org Cc: beilei.xing@intel.com, Qiming Chen Date: Mon, 30 Aug 2021 10:09:45 +0800 Message-Id: <20210830020945.2715-1-chenqiming_huawei@163.com> X-Mailer: git-send-email 2.30.1.windows.1 In-Reply-To: <20210830020219.2605-1-chenqiming_huawei@163.com> References: <20210830020219.2605-1-chenqiming_huawei@163.com> MIME-Version: 1.0 X-CM-TRANSID: GtxpCgA36dsSPixh4doiQg--.40708S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxJr43AF15Zr1kuF4rtryxXwb_yoW8ury3pF WayayqyFyqqF9rXay8Aa1xurWrGanYyay5KFs8A3sIy398tF1xtrW7tFyqvasFyF1kWFyq vFsFvrWUua4DZF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07b4PEfUUUUU= X-Originating-IP: [124.160.214.152] X-CM-SenderInfo: xfkh01xlpl0w5bkxt4lhl6il2tof0z/xtbBZxT+oFet3wE4nwAAsu Subject: [dpdk-dev] [PATCH v2] net/i40e: solve vf vlan strip X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Kernel PF+DPDK VF mode, after vf adds vlan, the test result shows that the vlan received from vf has been stripped. The patch solves the problem that the kernel i40e.ko driver strips the vlan by default after vf adds vlan. Determine whether to strip vlan through the DEV_RX_OFFLOAD_VLAN_STRIP mask bit in rxmode.offload. Environmental information: 1) dpdk 19.11 2) Kernel PF i40e.ko: 2.7.12 3) Firmware: 6.01 0x800034a3 1.1747.0 I did not use testpmd to test vlan filter, but write Demo for testing based on the following deployment: 1) x710 nic, use 2 PFs, each PF virtualizes 1 VF 2) 2 pf connected with fiber optic cable 3) 2 vf are hard to pass through to the VM 4) In vm, dpdk takes over the vf port, 5) One port is used as the sending port, and the other port is used as the receiving port, e.g. xmit portid is 0, rx portid is 1 Use the default configuration for port 0 as the sender, and configure port 1 as the receiving port as follows: 1) rte_eth_dev_set_vlan_offload(1, ETH_VLAN_FILTER_OFFLOAD) 2) rte_eth_dev_vlan_filter(1, 100, 1) Do the following tests: Demo constructs a message with vlan 100 to be sent from port 0, and found that the vlan header of the message received from port 1 was stripped. Signed-off-by: Qiming Chen Signed-off-by: Qiming Chen --- v2: Clear coding style quesion. --- drivers/net/i40e/i40e_ethdev_vf.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 625981048a..267e7be0c6 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -1852,11 +1852,15 @@ static int i40evf_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) { int ret; + struct rte_eth_conf *dev_conf = &dev->data->dev_conf; - if (on) + if (on) { ret = i40evf_add_vlan(dev, vlan_id); - else + if (!(dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_VLAN_STRIP)) + i40evf_disable_vlan_strip(dev); + } else { ret = i40evf_del_vlan(dev,vlan_id); + } return ret; }