From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0084.outbound.protection.outlook.com [104.47.32.84]) by dpdk.org (Postfix) with ESMTP id 485F72BC7 for ; Thu, 19 Oct 2017 03:14:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=GOYaRidIxIWhKOV++4A8IHEqa9ySJNf3oM177IiHx7U=; b=O6cq6CtNqIS8ceU9TPY7OYF68gE2xkqM63as+3LFt3zarVOdmtrz/E4OFv3VRebjtvYhbw63hhjFnvbSP1UUNLb34LHPcOL3XfqMzjPcGrPKAWwI09WaUxSsCMwm8rx87686I4gDCrG1Zub4iNw4u6Yn+okgDe62FH4uDmyBoCk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by DM5PR0701MB3830.namprd07.prod.outlook.com (2603:10b6:4:7f::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Thu, 19 Oct 2017 01:14:10 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Harish Patil , Dept-EngDPDKDev@cavium.com Date: Wed, 18 Oct 2017 18:13:30 -0700 Message-Id: <1508375611-9326-2-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1508375611-9326-1-git-send-email-rasesh.mody@cavium.com> References: <1508375611-9326-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: CY4PR03CA0104.namprd03.prod.outlook.com (2603:10b6:910:4d::45) To DM5PR0701MB3830.namprd07.prod.outlook.com (2603:10b6:4:7f::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e3263311-f131-4743-8c31-08d5168eb486 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:DM5PR0701MB3830; X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3830; 3:FxRFxCLszmxDcTfsQ1hnmtREY+th4U4hF1QFKVz7gUWw4Ejmz4f+3e+NBjMTmGinob45kt6FW075PMiF91thk/b+t5cAMIa5OJ1qZgob/GkgH9NusIxVi/g+WXoXNTXbPmByckfJYJtJpNQcR+sCqOHT4l+SlOB78wkKujJwmiVr9Wpjs1blshBPiU/oEvIYSWFYM1TZoBOfxzze4JyU+7BxjCIFvno34k9wz91S5AgMmSYZO1EzOiz+82X76cYJ; 25:txAvI0+qTALD8Xechp0qNmEzk0VybDNY3NOmUwzSCn5eRFPU2J4k1Qx2eADtg1iReOQV8lCJpsHXjD8DnNmTU5Rd5aUPdxyFrzlok1VTkQyHeAKPkIr/MBiygzZPPyQ/GAcHxQqqPS3L+9DkXjmKxEtNpJKDSX5TY41jhRSDapb3RDULEBWVNLYcD8hXLEurLGkMCDVNbIDYyQ9C9HdX2ipqs5+yMthra28byZ0FQFAT492blWWvSZsQwkHWAsB9rCAfYxuGRxPyiwN6EP5AXBksIidP7d6QJTnNQPHamu8kkHOAvYoigbbBmYaorLrwv1cAlM9Vj8aGqI4+dxvQSA==; 31:W/PL1B34pAbd/pz4jE71B6UQPLNiCloDQWHEiJfZZaHGRgM32NkR6CxXdBp/29CL4uDojtDmVAqYmFzU9/fudBapxhMeW9+XaCo/XogY3eqw9gqzWJ6i8czLgSnSmoCQpSF6hUw3m6dxioamsJz7yRj69zxvyF+LGUu4kA/SLp1bi/rZkJiuxKVhJr7g0R4jc7XhcFP+9aLB/Mi2mnYsIRIUdPer3oIR/8LF4bQwLR8= X-MS-TrafficTypeDiagnostic: DM5PR0701MB3830: X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3830; 20:ch5TRDfqonsFhsoHyPvp9rdnPfNlkWLjo4OD/qJGrDrlziDhbeSzCyAHMLHYzJGl9mC6ST2jMW68PJw+DCtTKAGqR6zPIgaQ/tBVHfVC99KxRQdxiBv3+E8mTsF65rZc3BN30JLqYhGyq3P5rF2QJyqVGmnu1V09amnDPlOABO6px+AuY8TJrWC36yVn9s2JilB2/dMMmzvhrxycmZkd3ZWjGaaALjIqpm9YLqZRruwjczRXptHfy0iLHOjq73Z1YsTLF0TH8n4RqOEQzycKa/g4d3ke/eEJftmXlrRulp0pa6ZVJCpUHr0Dfsrmsad/tyyQ6Yl27bIeJMTXdzgICERxBlm9tW6TYqRJD37m7tpDjiuiQQDCK9ZmkkgCdC4KCea9tNRAh+Qojz6UDwrReYiPXlDbO/eQNddANuSKwAEEATJOo1yI0Ki9mVFQhFXfNUypFOCmxLEh9b2P7jtSKA8X/oG01OL2YZQhBABdWL1fOI/BsXAAYC9jjJGMTeq6; 4:kP8SpDP6HRpuzAdv1WDAsx28UsnquUguXfOPjQ0OHVhLcAq8DSIp2GQCoJILqAzpLmEjTlKs+qywxzyyQUtcNNGb4XdOd2xmHymR2yjBqaKY78KN6Db4nYEAJuT+NNAOUNl1mjJ0fztb8B7FEQ7KqyjFWe6a3fjrLb7kt8wOyWzQFP7B5fv5o2orDcOuajx5220MSobMPjFSDEM6YQencCGuahOVJeP5Y/CK/SZyHfz6X8EYlf1RuSCRppOq4d5m X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(6041248)(20161123564025)(20161123555025)(20161123562025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR0701MB3830; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR0701MB3830; X-Forefront-PRVS: 0465429B7F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(189002)(199003)(68736007)(305945005)(2361001)(316002)(6666003)(72206003)(4720700003)(189998001)(16586007)(50986999)(101416001)(5660300001)(50226002)(21086003)(16526018)(76176999)(48376002)(97736004)(3846002)(36756003)(55016002)(53936002)(50466002)(106356001)(5003940100001)(25786009)(107886003)(6116002)(478600001)(2906002)(8676002)(2950100002)(8936002)(69596002)(6916009)(7736002)(47776003)(81166006)(33646002)(66066001)(81156014)(105586002)(86362001)(2351001)(4326008)(217873001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3830; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR0701MB3830; 23:3H4eiXNgPcF34b4Fl1NTtD1LcNvIfxqUMPJD+hl?= =?us-ascii?Q?YIE0XVR3y9dxuQFmA/oT3B6RRneyB7WWSXNUcltMvP4luOfcCkT7Y+q+wRzw?= =?us-ascii?Q?MBm27/7bqDZDQWsS8Q6838PfuSReTvbGZbshnevl23Lh8+xPfOsC+MKgyqSP?= =?us-ascii?Q?ozqQKQfL88fCr+PtmHptxOdJUNVcBAaEiLdcD/SVVMpQw2qCfpdEuuZqRzwv?= =?us-ascii?Q?DYNKgXMUobkvlnvTfEUXjLfYpSiePlkFd3RTnUIgd8K5xWlvLDnRLr3IpXLN?= =?us-ascii?Q?iFOaf/7Ji4T2oYV+a1xysmNR4+/KEIICrwmL1p96zYvnH1RgvwPBtYN6N8BP?= =?us-ascii?Q?qlfRpGGEN2pUT85TOqoJvj0tT4X7aSTT4PYJcW64t4OW7UlHH+edG2TqsKgP?= =?us-ascii?Q?m2OB96Uy/mLGejyj/WXglkrVIMmBJcOVBo5qW+2g1GSYUWHM72wG2FYQeZfH?= =?us-ascii?Q?UIKUrW9/3O200Wn0zWfyJfaQDcydzPgpwMlE3mNJMKri5+b9XNKuF3o4nmWm?= =?us-ascii?Q?EAiXIHN/Y8eLyMHTcFuNC4x11ydIEHatvZAi6wGhoF1qjZ7KcxMhPe1SjyRt?= =?us-ascii?Q?U8MUA3eesJSCw6/7+L8/y0qVJrqOFnRFrPtR79vZHrPtu/+rG04TiNMOZBU4?= =?us-ascii?Q?dW5+NC5rLXBpYd967eo1ryty2SXdLKulC5xN8Gu/IpYubJ59Qva0NaoN6sjc?= =?us-ascii?Q?0Y53hJzNM07297PuEgQRKDa2xorNcDBsng8OAH2fpljY0LZ0FsNeTi8NuXV8?= =?us-ascii?Q?pXvBYD+Ypq0Ietvn+zMurjK5IRSrpSBMSJdUz3RSfOz3p361I2qVXZSY64cv?= =?us-ascii?Q?4JcmbBXAz6/J2MgYWCIQZJmbSfqru+hvsdet15X1mOIIc7M+FDzN03kA25sF?= =?us-ascii?Q?8yPhrLQ5ok+Z51R0Zito3I6sSOhpxciMBhc8OjNh9C0FgvyrX8M42owbtUK9?= =?us-ascii?Q?CCPVpBkxDpAUy9+SO4fmsi905MFYi95Tlq5eq3y3C2PdhJ+OjwG6r86KP91L?= =?us-ascii?Q?6ZUos6nOAYd6MyqSGjQ3auPkJ9SQxoa8wh8+J+Br8D23HvZpu86rvCPdrU3k?= =?us-ascii?Q?9sb7aHhFVwV0VbjOFzwq8hr0fOaW6wfVyMud7+LYxdDsZTjNgqKjSEZ9ntvF?= =?us-ascii?Q?+/AjHpbKJ54zRxrgANyEn60ATurOpXE/YRvPTHFhmvfeAsNOUE5+xe8RHsHe?= =?us-ascii?Q?5uSWucXHp/zjHI8wQ7j4mA0zKu/h0A5DcI7rh?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3830; 6:YAjWfFIE6RcoUmbuzyr36I4/oQndiBsjZ6fyWGeHblWI/ztzCz88TFDtEcP81hYQx81u7PUClALdjZuHXgVOU0ki073SjBLn94ThSOiYogYZralo68k2y4HZTFJpl2tamnIISEAHXOow1mqNa5bbs3KniM88hetCLGI5Rg6eJEIYDLBWW8Z7AUHSCV9ivshwEzsuaIJPPCV77b//CPOBwk1j0s2f/VVxksollPdQk5vpxAUcTp3ZK+fm+vm1q9FJriBDFvPLtHDfSSaJtB06gzjdFU4i9F2jsCZgw8LfOiwv87vUttELGWeoW81gbq4HYyKQKoqJLLi2uaxANj5Y6Q==; 5:FjTuEkXf96sqwwBdWFoXjIJFb0eZLAcFkf+bPx0aRIWBGfaybxaJBHi4J4ncRWtn4k7ABnuiUZmgIzS6ISI0a0doKn1ASssjks3o5Nx6BftHVkUGfQoC8j0KvYd4pEdA4mtgBFSL62UGeNeHlx+SzQ==; 24:Ldey1AKx5rpwHPmheXm1KYSEOdHSQ0yMyNmoThiNS19X7k6PzMNMlYZCjLDE8w87+3c8HmiT+EAIIj7oNBFm4h4pR5Mfjk6h5pp6IupQrm8=; 7:0AmmgPOpAy+z5XU3PilJ8hbi6ycQZPC6RWOzqSwWxr9j3484eI1aYQAFUhH3t6EoqcPf71/QWrHBwYgEqvNDgODpyoAus8vW4QVaX5QAYgGYJI+0j7OBl3wX6Xk/9GoCdO91wVv5SJGMWqphOQ1klj8rv27Ta4StRPojpNp+Q5KDobh08GgmjkuBqFqDtAU23almJwbXWHWzR/FdzsgiMmegVILWoC3qSw/ar32G1ms= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Oct 2017 01:14:10.9083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0701MB3830 Subject: [dpdk-dev] [PATCH 2/3] net/qede: add support for VXLAN UDP port config over VF X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Oct 2017 01:14:12 -0000 From: Harish Patil - Allow VXLAN enable/disable over VF using udp_tunnel_port_add/del APIs. Only default MAC/VLAN classification is supported. - Enable VxLAN before UDP port configuration. - Change VxLAN default UDP port to 4789 instead of 8472. Signed-off-by: Harish Patil --- drivers/net/qede/qede_ethdev.c | 195 ++++++++++++++++++++++++---------------- drivers/net/qede/qede_ethdev.h | 11 ++- 2 files changed, 127 insertions(+), 79 deletions(-) diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index dc67bfd..5727c6a 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -602,15 +602,45 @@ static void qede_set_ucast_cmn_params(struct ecore_filter_ucast *ucast) return ecore_filter_accept_cmd(edev, 0, flags, false, false, ECORE_SPQ_MODE_CB, NULL); } -static void qede_set_cmn_tunn_param(struct ecore_tunnel_info *p_tunn, - uint8_t clss, bool mode, bool mask) + +static int +qede_vxlan_enable(struct rte_eth_dev *eth_dev, uint8_t clss, + bool enable, bool mask) { - memset(p_tunn, 0, sizeof(struct ecore_tunnel_info)); - p_tunn->vxlan.b_update_mode = mode; - p_tunn->vxlan.b_mode_enabled = mask; - p_tunn->b_update_rx_cls = true; - p_tunn->b_update_tx_cls = true; - p_tunn->vxlan.tun_cls = clss; + struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); + struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); + enum _ecore_status_t rc = ECORE_INVAL; + struct ecore_ptt *p_ptt; + struct ecore_tunnel_info tunn; + struct ecore_hwfn *p_hwfn; + int i; + + memset(&tunn, 0, sizeof(struct ecore_tunnel_info)); + tunn.vxlan.b_update_mode = enable; + tunn.vxlan.b_mode_enabled = mask; + tunn.b_update_rx_cls = true; + tunn.b_update_tx_cls = true; + tunn.vxlan.tun_cls = clss; + + for_each_hwfn(edev, i) { + p_hwfn = &edev->hwfns[i]; + p_ptt = IS_PF(edev) ? ecore_ptt_acquire(p_hwfn) : NULL; + rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, p_ptt, + &tunn, ECORE_SPQ_MODE_CB, NULL); + if (rc != ECORE_SUCCESS) { + DP_ERR(edev, "Failed to update tunn_clss %u\n", + tunn.vxlan.tun_cls); + break; + } + } + + if (rc == ECORE_SUCCESS) { + qdev->vxlan.enable = enable; + qdev->vxlan.udp_port = (enable) ? QEDE_VXLAN_DEF_PORT : 0; + DP_INFO(edev, "vxlan is %s\n", enable ? "enabled" : "disabled"); + } + + return rc; } static int @@ -2172,19 +2202,51 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); struct ecore_tunnel_info tunn; /* @DPDK */ struct ecore_hwfn *p_hwfn; + struct ecore_ptt *p_ptt; + uint16_t udp_port; int rc, i; PMD_INIT_FUNC_TRACE(edev); memset(&tunn, 0, sizeof(tunn)); if (tunnel_udp->prot_type == RTE_TUNNEL_TYPE_VXLAN) { + /* Enable VxLAN tunnel if needed before UDP port update using + * default MAC/VLAN classification. + */ + if (add) { + if (qdev->vxlan.udp_port == tunnel_udp->udp_port) { + DP_INFO(edev, + "UDP port %u was already configured\n", + tunnel_udp->udp_port); + return ECORE_SUCCESS; + } + /* Enable VXLAN if it was not enabled while adding + * VXLAN filter. + */ + if (!qdev->vxlan.enable) { + rc = qede_vxlan_enable(eth_dev, + ECORE_TUNN_CLSS_MAC_VLAN, true, true); + if (rc != ECORE_SUCCESS) { + DP_ERR(edev, "Failed to enable VXLAN " + "prior to updating UDP port\n"); + return rc; + } + } + udp_port = tunnel_udp->udp_port; + } else { + if (qdev->vxlan.udp_port != tunnel_udp->udp_port) { + DP_ERR(edev, "UDP port %u doesn't exist\n", + tunnel_udp->udp_port); + return ECORE_INVAL; + } + udp_port = 0; + } + tunn.vxlan_port.b_update_port = true; - tunn.vxlan_port.port = (add) ? tunnel_udp->udp_port : - QEDE_VXLAN_DEF_PORT; + tunn.vxlan_port.port = udp_port; for_each_hwfn(edev, i) { p_hwfn = &edev->hwfns[i]; - struct ecore_ptt *p_ptt = IS_PF(edev) ? - ecore_ptt_acquire(p_hwfn) : NULL; + p_ptt = IS_PF(edev) ? ecore_ptt_acquire(p_hwfn) : NULL; rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, p_ptt, &tunn, ECORE_SPQ_MODE_CB, NULL); if (rc != ECORE_SUCCESS) { @@ -2195,6 +2257,15 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) return rc; } } + + qdev->vxlan.udp_port = udp_port; + /* If the request is to delete UDP port and if the number of + * VXLAN filters have reached 0 then VxLAN offload can be be + * disabled. + */ + if (!add && qdev->vxlan.enable && qdev->vxlan.num_filters == 0) + return qede_vxlan_enable(eth_dev, + ECORE_TUNN_CLSS_MAC_VLAN, false, true); } return 0; @@ -2284,35 +2355,38 @@ static int qede_vxlan_tunn_config(struct rte_eth_dev *eth_dev, { struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); - struct ecore_tunnel_info tunn; - struct ecore_hwfn *p_hwfn; enum ecore_filter_ucast_type type; - enum ecore_tunn_clss clss; + enum ecore_tunn_clss clss = MAX_ECORE_TUNN_CLSS; struct ecore_filter_ucast ucast; char str[80]; - uint16_t filter_type; - int rc, i; + uint16_t filter_type = 0; + int rc; PMD_INIT_FUNC_TRACE(edev); - filter_type = conf->filter_type | qdev->vxlan_filter_type; - /* First determine if the given filter classification is supported */ - qede_get_ecore_tunn_params(filter_type, &type, &clss, str); - if (clss == MAX_ECORE_TUNN_CLSS) { - DP_ERR(edev, "Wrong filter type\n"); - return -EINVAL; - } - /* Init tunnel ucast params */ - rc = qede_set_ucast_tunn_cmn_param(&ucast, conf, type); - if (rc != ECORE_SUCCESS) { - DP_ERR(edev, "Unsupported VxLAN filter type 0x%x\n", - conf->filter_type); - return rc; - } - DP_INFO(edev, "Rule: \"%s\", op %d, type 0x%x\n", - str, filter_op, ucast.type); switch (filter_op) { case RTE_ETH_FILTER_ADD: + if (IS_VF(edev)) + return qede_vxlan_enable(eth_dev, + ECORE_TUNN_CLSS_MAC_VLAN, true, true); + + filter_type = conf->filter_type; + /* Determine if the given filter classification is supported */ + qede_get_ecore_tunn_params(filter_type, &type, &clss, str); + if (clss == MAX_ECORE_TUNN_CLSS) { + DP_ERR(edev, "Unsupported filter type\n"); + return -EINVAL; + } + /* Init tunnel ucast params */ + rc = qede_set_ucast_tunn_cmn_param(&ucast, conf, type); + if (rc != ECORE_SUCCESS) { + DP_ERR(edev, "Unsupported VxLAN filter type 0x%x\n", + conf->filter_type); + return rc; + } + DP_INFO(edev, "Rule: \"%s\", op %d, type 0x%x\n", + str, filter_op, ucast.type); + ucast.opcode = ECORE_FILTER_ADD; /* Skip MAC/VLAN if filter is based on VNI */ @@ -2332,26 +2406,17 @@ static int qede_vxlan_tunn_config(struct rte_eth_dev *eth_dev, if (rc != ECORE_SUCCESS) return rc; - qdev->vxlan_filter_type = filter_type; + qdev->vxlan.num_filters++; + qdev->vxlan.filter_type = filter_type; + if (!qdev->vxlan.enable) + return qede_vxlan_enable(eth_dev, clss, true, true); - DP_INFO(edev, "Enabling VXLAN tunneling\n"); - qede_set_cmn_tunn_param(&tunn, clss, true, true); - for_each_hwfn(edev, i) { - p_hwfn = &edev->hwfns[i]; - struct ecore_ptt *p_ptt = IS_PF(edev) ? - ecore_ptt_acquire(p_hwfn) : NULL; - rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, p_ptt, - &tunn, ECORE_SPQ_MODE_CB, NULL); - if (rc != ECORE_SUCCESS) { - DP_ERR(edev, "Failed to update tunn_clss %u\n", - tunn.vxlan.tun_cls); - if (IS_PF(edev)) - ecore_ptt_release(p_hwfn, p_ptt); - } - } - qdev->num_tunn_filters++; /* Filter added successfully */ break; case RTE_ETH_FILTER_DELETE: + if (IS_VF(edev)) + return qede_vxlan_enable(eth_dev, + ECORE_TUNN_CLSS_MAC_VLAN, false, true); + ucast.opcode = ECORE_FILTER_REMOVE; if (!(filter_type & ETH_TUNNEL_FILTER_TENID)) { @@ -2365,38 +2430,14 @@ static int qede_vxlan_tunn_config(struct rte_eth_dev *eth_dev, if (rc != ECORE_SUCCESS) return rc; - qdev->vxlan_filter_type = filter_type; - qdev->num_tunn_filters--; - /* Disable VXLAN if VXLAN filters become 0 */ - if (qdev->num_tunn_filters == 0) { - DP_INFO(edev, "Disabling VXLAN tunneling\n"); - - /* Use 0 as tunnel mode */ - qede_set_cmn_tunn_param(&tunn, clss, false, true); - for_each_hwfn(edev, i) { - p_hwfn = &edev->hwfns[i]; - struct ecore_ptt *p_ptt = IS_PF(edev) ? - ecore_ptt_acquire(p_hwfn) : NULL; - rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, p_ptt, - &tunn, ECORE_SPQ_MODE_CB, NULL); - if (rc != ECORE_SUCCESS) { - DP_ERR(edev, - "Failed to update tunn_clss %u\n", - tunn.vxlan.tun_cls); - if (IS_PF(edev)) - ecore_ptt_release(p_hwfn, - p_ptt); - break; - } - } - } + if (qdev->vxlan.num_filters == 0) + return qede_vxlan_enable(eth_dev, clss, false, true); break; default: DP_ERR(edev, "Unsupported operation %d\n", filter_op); return -EINVAL; } - DP_INFO(edev, "Current VXLAN filters %d\n", qdev->num_tunn_filters); return 0; } @@ -2524,6 +2565,8 @@ int qede_dev_filter_ctrl(struct rte_eth_dev *eth_dev, .reta_update = qede_rss_reta_update, .reta_query = qede_rss_reta_query, .mtu_set = qede_set_mtu, + .udp_tunnel_port_add = qede_udp_dst_port_add, + .udp_tunnel_port_del = qede_udp_dst_port_del, }; static void qede_update_pf_params(struct ecore_dev *edev) diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h index 4543533..3212020 100644 --- a/drivers/net/qede/qede_ethdev.h +++ b/drivers/net/qede/qede_ethdev.h @@ -122,7 +122,6 @@ #define PCI_DEVICE_ID_QLOGIC_AH_IOV CHIP_NUM_AH_IOV -#define QEDE_VXLAN_DEF_PORT 8472 extern char fw_file[]; @@ -171,6 +170,13 @@ struct qede_fdir_info { SLIST_HEAD(fdir_list_head, qede_fdir_entry)fdir_list_head; }; +struct qede_vxlan_tunn { + bool enable; + uint16_t num_filters; + uint16_t filter_type; +#define QEDE_VXLAN_DEF_PORT (4789) + uint16_t udp_port; +}; /* * Structure to store private data for each port. @@ -200,8 +206,7 @@ struct qede_dev { SLIST_HEAD(uc_list_head, qede_ucast_entry) uc_list_head; uint16_t num_uc_addr; bool handle_hw_err; - uint16_t num_tunn_filters; - uint16_t vxlan_filter_type; + struct qede_vxlan_tunn vxlan; struct qede_fdir_info fdir_info; bool vlan_strip_flg; char drv_ver[QEDE_PMD_DRV_VER_STR_SIZE]; -- 1.7.10.3