From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0071.outbound.protection.outlook.com [104.47.2.71]) by dpdk.org (Postfix) with ESMTP id 2BC9D8E7C for ; Tue, 5 Jun 2018 02:13:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JZBT8ZQkiMVnTjRLZ1YiQiHdKyRwpQ/PscpUMc08loE=; b=NP6MLNH0VVh3Vh+cZAo8nSK8beDxOlmran3UhKdy4a8fYtK5UCj8ZTdMaXj6K4Z5zDIFRDRs1dr6qBm2Uu9SymnRNpIQx1ZwxbcvnI69IAYd4+TIcE1fFN+AiN8xFg+OWAZ0Ni1ZO0UgAmJ8OojtGKGa6R5G+PZgRnnZBQD4aao= Received: from mellanox.com (209.116.155.178) by AM5PR0501MB2036.eurprd05.prod.outlook.com (2603:10a6:203:1a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.820.11; Tue, 5 Jun 2018 00:13:26 +0000 From: Yongseok Koh To: yliu@fridaylinux.org Cc: stable@dpdk.org, shahafs@mellanox.com, adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Date: Mon, 4 Jun 2018 17:11:10 -0700 Message-Id: <20180605001129.13184-49-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180605001129.13184-1-yskoh@mellanox.com> References: <20180605001129.13184-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: CO1PR15CA0060.namprd15.prod.outlook.com (2603:10b6:101:1f::28) To AM5PR0501MB2036.eurprd05.prod.outlook.com (2603:10a6:203:1a::22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:AM5PR0501MB2036; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 3:k4KXugrmUnVpW/P9aSoHM+jZO6HX2w2R4EEc3DQ/GqgyrDCskS6p97ePdnwHf+Q+u5rhvdcmMmU8DEFscqbCG1dh+Mikmwr/OS7CogPYG3cyh+jwmM6/FtuCoGC1TJ9UT0BCHZrknQwqfZe92uiInQWJNezQEPkTRb+aZJh06J5kvOG38qo7KqNAlnAq9HEm1KhlUe9CZJ32GMmkBuGsnmU2ejLiTlBdFUBeu7khPe1kzP7rtChjypUgnAIeyPLW; 25:D/y4ytRvFxHFGkKBS/3NGTgKOhvAVW+/rk3jrUKDMd8iC/EyCcPJv9ymgzzT3vMfFewHRbpUgRSy/LQs756DEJi/WYbbtcJI+fHAk1iFlHvGQTb/1pnVJI/1r0BdOUx4QgY+XUbSnppKHRhZ1KPHU5q7v7hQtbReF8gQixuvL0C13Sxh1GAuiTCsM/0cNRFR73yqaZ2apherXfJTjHZw6fEYDovtHSA/1eFUCpePYZtD/Fh3CWmtZ49+gbCBo0qTxsGmWFFRr/k6GNXB+m9h2exi/mOT4if8b3sLPzcsHICv7XdvgXbxpLiKRutfldTt9XXV0JeAHTj+WwXmlkfkZg==; 31:Sb86rD0xHHOgrJPyhqBrUs1mU35HoxsLYdaawC+04VO2MxA+yygw/CjZrjiYpbWa93eoSLDSqym0xZFDVR80wr/HFa88OQ7/KJsdpuy82HSo1yECrMrEzxkSSZxjZfGOBEUR1bKv6eY9/CgZ/tMNrSabmgbyWyGvZ0ZDDXTCSb/hwGIwBncsmBZvyhipNqRNkYKQhXCFRCjVee2saOPeLIIfWIOzTv30i5lwlEeHwrE= X-MS-TrafficTypeDiagnostic: AM5PR0501MB2036: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 20:j1YxV1vY+HL5QFaebtaHfQu+6QBUrIsdkRoCBzVQMugFJmaemOGrqrAUXEDI3q1slPLSO6AfYk7fqU9JcDcAV4GSti19esueNVryyd8G0uvWtgE6i3wNDYK6Liglm4r66OTHi0N32lXEI+h4dQiU1H6dn91LZNvUkBmeJwPPtnOHdTFmfKh4TiGGRHE037IrfNWGcNnajAfwstqWo53VQSo3sNzWu2xLb1K/Q/Oktq8TXsrNvIDmaJO2XLtOp6Xp5F0dZh95yEi7mERyrJ4l232gmED7tmwdACtz7XqGed0jB5Ic+pKtWe6pvSMZYG1f7p7ibHcXnhrVYXzI+LRF9HWRjzp00KDypVDrZuokNf+9485O/7EwrgLITbo/5fKHV76B72yvSXRIgdIaQjCLiNDfXBQVzqyKikRnTm9zM3OwN2blUtJ6p20wbGqSU8oGhljpRY/tyIMS7zns18dtacQb32XFKNjJnxPlfYfkbvRC+DN51nd4dYj4Pr02co+I; 4:P7x2BEQX20WW0d56p+Bm/pglc01x4gCdM5+gj3tA40/w0TJBf1uPnWarFJaVOPMGn9b1IBUR/pvypxeIv+Bh9YKTsTERRC5ZgYzV3uKFz03AcIrRvByPWYHgupbqWrX3nqbBG1g2n7ul2h8AktEQXjkUvh5xQs3ZSPI7HkUB9eV5Gh6/kWS8XixSJ1TLHgamrTdi1atlABcJzTweL78Sca1nbylK72RUzQETYn0NdQUL7DyZhdUZ3cpA+vYtaRtEPr3akxgrIAQRqsqUB1aRhw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(3002001)(6055026)(149027)(150027)(6041310)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123558120)(6072148)(201708071742011)(7699016); SRVR:AM5PR0501MB2036; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0501MB2036; X-Forefront-PRVS: 0694C54398 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(1496009)(39380400002)(366004)(396003)(39860400002)(346002)(376002)(189003)(199004)(478600001)(81156014)(76176011)(7696005)(956004)(2361001)(50226002)(305945005)(2616005)(50466002)(47776003)(486006)(97736004)(5660300001)(6666003)(2351001)(106356001)(8936002)(186003)(81166006)(52116002)(6116002)(476003)(6916009)(23676004)(386003)(446003)(11346002)(66066001)(26005)(3846002)(8676002)(16526019)(1076002)(25786009)(21086003)(86362001)(2870700001)(53936002)(4326008)(2906002)(316002)(55016002)(36756003)(105586002)(69596002)(68736007)(7736002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0501MB2036; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA1MDFNQjIwMzY7MjM6VVNsMGpiN1JZc3F6dzg4K3BPSFJ4S2tL?= =?utf-8?B?OHI4RVZIUGJCVldxM1R3YWVCZDF3NHU4ZjdiZjZkYUJ6MzhBQ3VtUHFxNkg3?= =?utf-8?B?Y2hGVWZWVXIydFpJekp3NzViaGJXN2ViWlNmUS9keFpKVm1FbWp3RjRFdzN2?= =?utf-8?B?a21XK3J4aFY1Q1VTZER5RmZNeG9Ec0FaczhHdmYrVlJaVFkzVW12T2FNdjU0?= =?utf-8?B?T1RZem5xWWlPZ1J1Zks4a2svMHdmTllhNnZVeHQ2b3NodmNjTGFEcXRoc0Rr?= =?utf-8?B?ay95L1A3ajcwTlZaWUpvWFViSW1McHJJQURET01TSXQwR1J4NzZ1c0xkc3Y3?= =?utf-8?B?MHlhN2ZNUlNGeURyS3drTUt4aWJJY1lKQjVlRjkzb1JaU0w3Wm9wbnExZ2JZ?= =?utf-8?B?UzRlaUhOMFdTdy9NMGg2aHNFT01mZm4xUHI2cytrK3M5RTVqalUyTnpOckR5?= =?utf-8?B?c3FWMGJ2a0doczcvbEsxVThXTFYzTkFRSXQ1S1M3dHhjWkxrQmlpQlhCd1ZR?= =?utf-8?B?Lzc5OGZWY3AwdlIyZk03bGdZeXZ0VnU5RXc0Ukk2VzZRNTdjV1JaQjg1ZUdv?= =?utf-8?B?UlVoM0RjUkVndzBTR2tzT2ZBOGU2VGZuSVBURlcrTzhSN1dWVU10KytGNGQ0?= =?utf-8?B?OS9pZWZIVjFURXM2a1N3am95Z3BDbTduZHFhbW0yRE1UbCtRU01KcjRsRm1n?= =?utf-8?B?NGkzREs3UlduazcwZVRuSmdCbWxrLzJ5NHd6MFA3cDhhNDhrZXVRQlBiYmRC?= =?utf-8?B?K3k4RktUMWlqWkRCZDAvUndQSE82RGVzMlVtR0JYcC8rb0xjSk5QVmVETWtN?= =?utf-8?B?UUxncGJVdnAwT2p2QVJaVW9Dd2U2Wmljb0RHQUpLZGIvRlJYWVZvZk5md2VU?= =?utf-8?B?YmZ3Ui9VYWFFb2MrRlVNVmhac2RtbS9rM3poR05lMktqY3M3WWh1clZjYlBi?= =?utf-8?B?UHBCc2gwdjNsWkhBeExkeU12UkU0dDBUMTBVWXRiTWErNm5Gc3hxa3FwcDVQ?= =?utf-8?B?b2tZVEo0MzJGb040Y2owb2tSNzU1VlhjeXdKNHdMMHdKRVU5TWNycXNQaGNR?= =?utf-8?B?QnBQTjZ3UHUrWllnaTF1REdZRzJ6YndOZHhEM3hRUmtoUVUwWC9acUxHYStB?= =?utf-8?B?WkRrR2hZWnBUbzR1cDFtRGVhemREM0ZxNm9QT1o5eWJ1N3ExRTl1TEEzNWQr?= =?utf-8?B?RGl6THNZYnZwTjYwL1RCQS9ta1pvV1g5Y08vaGdKc1ZQbXBGYzhqck51bE1o?= =?utf-8?B?eUQ0Yk5mOHhvT0pYanFKVU1UWVdQdm1LWEc1NXl2WlRXenFWWVJwTjh6MkI4?= =?utf-8?B?RHd2bjZXNDk2SHF0a1UrZjgxMTNmazl2QW56QnYwcG4xY1lnR2tWWVgxWjFr?= =?utf-8?B?RG5vdnY1dk1pZ3RuZzhoUWlvRy9JNm1LYWdoenYrR0VvdWg3bXAwTVdzR0ZW?= =?utf-8?B?UWRIL1ZmbzFMSjA2ZkZSb21aV2ZtU1dpTHpmUmh0d2JnRllFSEN2UWhiSU1O?= =?utf-8?B?OWlLVlErQzZYS29BY2FZY3VxcmtSc1FpaDhJbzNaYm9FQ0dTSTBEOWZjdDlp?= =?utf-8?B?Q0VzT0pDNmpvSGFSdU9WZDhlaVVSUEtxbERYdHdwbDdoL2JKK294TXNDbTlC?= =?utf-8?B?Q3JlalErbXVWWVlFSGRMNHlYL3dSRk1Qd2NKL00wNGo4WFhMbUpaOGV6OTRr?= =?utf-8?Q?kPyN4+ZNWdXS63ZJkFA0ZUMkGKh/6HEPKZ9QXSNs6?= X-Microsoft-Antispam-Message-Info: pzAYsh53P0IT9nklqMlZbTLfdOckG0ck+qx4BCgTRqeB45YnxkP9KiL+oBdx4P987WOpvtl+kNc5gLRYi/kGVTH9uRC3VsUzyEDdO2+uR6tQkj4ihFVXi1YMA4DHPsACx8A4KzNWinobw80EH0RPF3pjiZxx5UyXapLvhCkZVg2oUaH28IxEoxMeVEFP2Av4 X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 6:jx5kUPZQBt0IXYXdMVbl9JYeYenalQpgmOm9D3cGkr1q3HlJYNj10BcxNtXSJ9LK6Gd9LYCmWcRfraZ+3xGVGZUHVBoRNB8TP1p8GBFNa4Yoznv0ohf0XwuAYZw4w72aaaHrqDBNKxNOIkHoPIIL9k08j82YcVMh3YlcRoeBFxxa0sGguczH3o9+yY9J1qaINX7CVsuFOjcBfAfTvGLwOT3bHKlbQr5sKgzBFxzheap8bLtt8x7cHGiJGpc6X5T+XXHtEv/FyscxVR4aenjtkYHizYhZeYkMpGH80l+jW2G1nKf1vmqOPqQIxeDQ2UeNHEpCbKy/+mBFGA8QpxCGBNprNXAoKv0pYAh7dZrAVQGp8LEHGsbG/F9IWB79DAE0pvWb4rCo1g3qubaRb1xr/ML8/UtqstB6b2n16PzSZz9/sTvpu4CrtPaCJebZ6uEV/laWTtdKrk/aIx+PzboVpA==; 5:1MCJtcwKJEcmA5B5Fr2Y1e7lXQIZt/Jr7vnoFPps0JyTFDalb99i/jlSfvlZf0b5FzyGDEBXYfn3L7fWUu5vDpSIQhYNjEfma5LaTEjOuvF8bc+Oe3sNtvm+o7vILT3mK7P7yTc+O3w6bMB3HyHCX4RFPpf9Ljpkx0x8rTuVDnQ=; 24:p5iiOhnjpHAbNOg5gd7B2HVMeoXXyNFb67JYHcC5emXWrl5Z5KbuFJkmcBpcnUO3qtNxGqiOUif7mfn4vHdZU3yZbhCo5IElWN4UK1DN22U= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 7:Jxib6ewZezXtsAniEVhKgt17OIRWWW27N0Z7rML/GnIGpn5PMBl51LHct/XSWCFtuVcntYl4EaJlqGVLS5Cu0qFXplSf6q89eqI0/XBXX2bnusg0Q2ObXpABHgvwWvjEiMmrG3sZ6PyOHkcfZtcErKV3GljDfAYMs2dePgUHVUb8UmRCRn+VVqorx3tMUQmeHQguavC4S0k4XtSBN2x0OvoxcbHaOPMNcW3aOSG9JwVApF9nq4t0y4dpZTyHQUsv X-MS-Office365-Filtering-Correlation-Id: 5c3baf42-8eb9-4f81-26e0-08d5ca7929a1 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2018 00:13:26.7322 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5c3baf42-8eb9-4f81-26e0-08d5ca7929a1 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0501MB2036 Subject: [dpdk-stable] [PATCH 48/67] net/mlx5: split L3/L4 in flow director X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jun 2018 00:13:29 -0000 From: NĂ©lio Laranjeiro [ upstream commit ca42b8a8b74956d179a25c94ccb7f5a516013da0 ] This will help to bring back the mask handler which was removed when this feature was rewritten on top of rte_flow. Signed-off-by: Nelio Laranjeiro Acked-by: Adrien Mazarguil --- drivers/net/mlx5/mlx5_flow.c | 122 +++++++++++++++---------------------------- 1 file changed, 42 insertions(+), 80 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index a5e20dfe9..9591009b6 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -2721,53 +2721,10 @@ mlx5_fdir_filter_convert(struct rte_eth_dev *dev, return -rte_errno; } attributes->queue.index = fdir_filter->action.rx_queue; + /* Handle L3. */ switch (fdir_filter->input.flow_type) { case RTE_ETH_FLOW_NONFRAG_IPV4_UDP: - attributes->l3.ipv4.hdr = (struct ipv4_hdr){ - .src_addr = input->flow.udp4_flow.ip.src_ip, - .dst_addr = input->flow.udp4_flow.ip.dst_ip, - .time_to_live = input->flow.udp4_flow.ip.ttl, - .type_of_service = input->flow.udp4_flow.ip.tos, - .next_proto_id = input->flow.udp4_flow.ip.proto, - }; - attributes->l4.udp.hdr = (struct udp_hdr){ - .src_port = input->flow.udp4_flow.src_port, - .dst_port = input->flow.udp4_flow.dst_port, - }; - attributes->items[1] = (struct rte_flow_item){ - .type = RTE_FLOW_ITEM_TYPE_IPV4, - .spec = &attributes->l3, - .mask = &attributes->l3, - }; - attributes->items[2] = (struct rte_flow_item){ - .type = RTE_FLOW_ITEM_TYPE_UDP, - .spec = &attributes->l4, - .mask = &attributes->l4, - }; - break; case RTE_ETH_FLOW_NONFRAG_IPV4_TCP: - attributes->l3.ipv4.hdr = (struct ipv4_hdr){ - .src_addr = input->flow.tcp4_flow.ip.src_ip, - .dst_addr = input->flow.tcp4_flow.ip.dst_ip, - .time_to_live = input->flow.tcp4_flow.ip.ttl, - .type_of_service = input->flow.tcp4_flow.ip.tos, - .next_proto_id = input->flow.tcp4_flow.ip.proto, - }; - attributes->l4.tcp.hdr = (struct tcp_hdr){ - .src_port = input->flow.tcp4_flow.src_port, - .dst_port = input->flow.tcp4_flow.dst_port, - }; - attributes->items[1] = (struct rte_flow_item){ - .type = RTE_FLOW_ITEM_TYPE_IPV4, - .spec = &attributes->l3, - .mask = &attributes->l3, - }; - attributes->items[2] = (struct rte_flow_item){ - .type = RTE_FLOW_ITEM_TYPE_TCP, - .spec = &attributes->l4, - .mask = &attributes->l4, - }; - break; case RTE_ETH_FLOW_NONFRAG_IPV4_OTHER: attributes->l3.ipv4.hdr = (struct ipv4_hdr){ .src_addr = input->flow.ip4_flow.src_ip, @@ -2783,73 +2740,78 @@ mlx5_fdir_filter_convert(struct rte_eth_dev *dev, }; break; case RTE_ETH_FLOW_NONFRAG_IPV6_UDP: + case RTE_ETH_FLOW_NONFRAG_IPV6_TCP: + case RTE_ETH_FLOW_NONFRAG_IPV6_OTHER: attributes->l3.ipv6.hdr = (struct ipv6_hdr){ .hop_limits = input->flow.udp6_flow.ip.hop_limits, .proto = input->flow.udp6_flow.ip.proto, }; memcpy(attributes->l3.ipv6.hdr.src_addr, - input->flow.udp6_flow.ip.src_ip, + input->flow.ipv6_flow.src_ip, RTE_DIM(attributes->l3.ipv6.hdr.src_addr)); memcpy(attributes->l3.ipv6.hdr.dst_addr, - input->flow.udp6_flow.ip.dst_ip, + input->flow.ipv6_flow.dst_ip, RTE_DIM(attributes->l3.ipv6.hdr.src_addr)); - attributes->l4.udp.hdr = (struct udp_hdr){ - .src_port = input->flow.udp6_flow.src_port, - .dst_port = input->flow.udp6_flow.dst_port, - }; attributes->items[1] = (struct rte_flow_item){ .type = RTE_FLOW_ITEM_TYPE_IPV6, .spec = &attributes->l3, .mask = &attributes->l3, }; + break; + default: + DRV_LOG(ERR, "port %u invalid flow type%d", + dev->data->port_id, fdir_filter->input.flow_type); + rte_errno = ENOTSUP; + return -rte_errno; + } + /* Handle L4. */ + switch (fdir_filter->input.flow_type) { + case RTE_ETH_FLOW_NONFRAG_IPV4_UDP: + attributes->l4.udp.hdr = (struct udp_hdr){ + .src_port = input->flow.udp4_flow.src_port, + .dst_port = input->flow.udp4_flow.dst_port, + }; attributes->items[2] = (struct rte_flow_item){ .type = RTE_FLOW_ITEM_TYPE_UDP, .spec = &attributes->l4, .mask = &attributes->l4, }; break; - case RTE_ETH_FLOW_NONFRAG_IPV6_TCP: - attributes->l3.ipv6.hdr = (struct ipv6_hdr){ - .hop_limits = input->flow.tcp6_flow.ip.hop_limits, - .proto = input->flow.tcp6_flow.ip.proto, + case RTE_ETH_FLOW_NONFRAG_IPV4_TCP: + attributes->l4.tcp.hdr = (struct tcp_hdr){ + .src_port = input->flow.tcp4_flow.src_port, + .dst_port = input->flow.tcp4_flow.dst_port, }; - memcpy(attributes->l3.ipv6.hdr.src_addr, - input->flow.tcp6_flow.ip.src_ip, - RTE_DIM(attributes->l3.ipv6.hdr.src_addr)); - memcpy(attributes->l3.ipv6.hdr.dst_addr, - input->flow.tcp6_flow.ip.dst_ip, - RTE_DIM(attributes->l3.ipv6.hdr.src_addr)); + attributes->items[2] = (struct rte_flow_item){ + .type = RTE_FLOW_ITEM_TYPE_TCP, + .spec = &attributes->l4, + .mask = &attributes->l4, + }; + break; + case RTE_ETH_FLOW_NONFRAG_IPV6_UDP: + attributes->l4.udp.hdr = (struct udp_hdr){ + .src_port = input->flow.udp6_flow.src_port, + .dst_port = input->flow.udp6_flow.dst_port, + }; + attributes->items[2] = (struct rte_flow_item){ + .type = RTE_FLOW_ITEM_TYPE_UDP, + .spec = &attributes->l4, + .mask = &attributes->l4, + }; + break; + case RTE_ETH_FLOW_NONFRAG_IPV6_TCP: attributes->l4.tcp.hdr = (struct tcp_hdr){ .src_port = input->flow.tcp6_flow.src_port, .dst_port = input->flow.tcp6_flow.dst_port, }; - attributes->items[1] = (struct rte_flow_item){ - .type = RTE_FLOW_ITEM_TYPE_IPV6, - .spec = &attributes->l3, - .mask = &attributes->l3, - }; attributes->items[2] = (struct rte_flow_item){ .type = RTE_FLOW_ITEM_TYPE_TCP, .spec = &attributes->l4, .mask = &attributes->l4, }; break; + case RTE_ETH_FLOW_NONFRAG_IPV4_OTHER: case RTE_ETH_FLOW_NONFRAG_IPV6_OTHER: - attributes->l3.ipv6.hdr = (struct ipv6_hdr){ - .hop_limits = input->flow.ipv6_flow.hop_limits, - .proto = input->flow.ipv6_flow.proto, - }; - memcpy(attributes->l3.ipv6.hdr.src_addr, - input->flow.ipv6_flow.src_ip, - RTE_DIM(attributes->l3.ipv6.hdr.src_addr)); - memcpy(attributes->l3.ipv6.hdr.dst_addr, - input->flow.ipv6_flow.dst_ip, - RTE_DIM(attributes->l3.ipv6.hdr.src_addr)); - attributes->items[1] = (struct rte_flow_item){ - .type = RTE_FLOW_ITEM_TYPE_IPV6, - .spec = &attributes->l3, - .mask = &attributes->l3, - }; break; default: DRV_LOG(ERR, "port %u invalid flow type%d", -- 2.11.0