From patchwork Wed Oct 17 02:07:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 46939 X-Patchwork-Delegate: shahafs@mellanox.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 016F55F22; Wed, 17 Oct 2018 04:08:05 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0083.outbound.protection.outlook.com [104.47.2.83]) by dpdk.org (Postfix) with ESMTP id B19035B16 for ; Wed, 17 Oct 2018 04:07:58 +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=AL6mPvzYSfolVceCConU16gD3RLoLmAGj7n5xjCPnIE=; b=Fz9C7gj1NP4ypm2Cv8Rm3R1d4lPc6Q0rEq+zRRYlT01M1J6PeiApclKBLYLjCrX99c6FrTenPMJ3YLuDLBLkPcCNmWr48L3E00AuI/O0Ah/6er6MByOR6Tl+ZSH9cg3rax6lCwY37kGrwzX8EzDNnsJTQa1wKt32rJXoDP0Docw= Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com (52.134.72.27) by DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.21; Wed, 17 Oct 2018 02:07:57 +0000 Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com ([fe80::f8a1:fcab:94f0:97cc]) by DB3PR0502MB3980.eurprd05.prod.outlook.com ([fe80::f8a1:fcab:94f0:97cc%3]) with mapi id 15.20.1228.027; Wed, 17 Oct 2018 02:07:57 +0000 From: Yongseok Koh To: Shahaf Shuler CC: "dev@dpdk.org" , Yongseok Koh , Ori Kam Thread-Topic: [PATCH 4/5] net/mlx5: fix wildcard item for Direct Verbs Thread-Index: AQHUZb44Sv6Ho+4ohEShzRKzUMWDDg== Date: Wed, 17 Oct 2018 02:07:57 +0000 Message-ID: <20181017020739.11203-4-yskoh@mellanox.com> References: <20181017020739.11203-1-yskoh@mellanox.com> In-Reply-To: <20181017020739.11203-1-yskoh@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BYAPR01CA0006.prod.exchangelabs.com (2603:10b6:a02:80::19) To DB3PR0502MB3980.eurprd05.prod.outlook.com (2603:10a6:8:10::27) authentication-results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [209.116.155.178] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB3946; 6:aPUlKvREtL5tDG07XIh4l6KlwMxCDHG21x3k67MA56T799uYkKzReTPqXJvSb/XKUzwpwBtQFGvIHepKEJeTwXnAXcE4xK65WWZwuZ1GO3uDGmjVNvRVphXhEDqSjDbtxwsUsqQzWRea/jvHxAgysPXwWWaP53Fz9nQyjmqBLo3pdxhIX2canHTL+NNiqr/CKJ/N1rxo2X7e4Xem+CfsX5fmyTTrmjcrZx8xA+H4BX96jXekCjRzcCTpIwPcvr7q6FQYdK5pbYH6Gg+x3ikq59vuef9CzmMnL/5zZFtIJ1BkIHAVUwYvQ75VaMqp6Z20nASdwn2uX8fc/HJi5UeJ8VEXt6JaP5PId0DyJ1J9NJojznxNVc8hqrVcsiNBTGJWqSXgbLxx74mFZG2vbq7tqTrlqmUSHTtkN8XrKfJrYkAS1kZs7eB5YDKietvHEOOAbAGVqq0IYwmyPH+rbq781A==; 5:4HRECztZ/hGKyq+PwU1AJB9Nd5a/kwy16iTyIXQ+FwgT2ieb5SCDvbOHuiXBZyjZjib0S6lDj2aywKyBW5zYpJZDRCJ0Ge3GqqKIkjuCSJk3ry9Ml/8KFEHW/qU6CIHncUSY8q5QsbIQAB7+2f7HBmBoulGe55cydI8IITPyhdE=; 7:2036nQUslS6qtUw5keUWBW0YiLe6F+2RASWfhb0aG4sSO1Y5JTfH6jt4AyRyxDbO5L5MC3+0n3Z524nyomK2S0vth/rx+Dex9KUDREug6sjzq2UV+3TVaBrvyiSf7dlWp4b5vUm3oIX+wEVbJsJZ9W9x2sKq0WHPnDt+lSXZ/ku5AfH6E1H2SoC9oqc6uAIVLTbBRRbA+XWutFfvJyoWz+VOThHsr5TKcajvnNgjh8/9dMu9Jv334S/tjQUJSxVz x-ms-office365-filtering-correlation-id: eca9f5b0-c2a7-4ab4-ef47-08d633d55b2b x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB3946; x-ms-traffictypediagnostic: DB3PR0502MB3946: 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)(10201501046)(3231355)(944501410)(52105095)(3002001)(6055026)(149066)(150057)(6041310)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991084); SRVR:DB3PR0502MB3946; BCL:0; PCL:0; RULEID:; SRVR:DB3PR0502MB3946; x-forefront-prvs: 08286A0BE2 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(396003)(346002)(376002)(136003)(366004)(199004)(189003)(71200400001)(71190400001)(105586002)(66066001)(97736004)(76176011)(86362001)(52116002)(2900100001)(99286004)(107886003)(36756003)(478600001)(14454004)(5250100002)(106356001)(54906003)(316002)(446003)(37006003)(6636002)(6486002)(11346002)(256004)(305945005)(8936002)(2616005)(476003)(486006)(6436002)(81166006)(81156014)(8676002)(53936002)(6862004)(4326008)(2906002)(25786009)(6512007)(5660300001)(186003)(7736002)(1076002)(102836004)(68736007)(3846002)(26005)(386003)(6116002)(6506007); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB3946; H:DB3PR0502MB3980.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: /oidMuCv/XIOjgQH0GzGnFbMLSYR9eRtNLD+J6F4sMdninQYCu6TSfRnvefI43DTLE6q4lt5r8b3jlBDQU+Niq7T6oK/VKBGkS/EuSqGjNXljasdi5bEOmXGdprBf5YhmwUMjvk4Nx2RyeZlybBGoAjT+L8YrflmwAAn2Jf4WjBTKCm1eeexkeCZE7hLYD03a4/kPLXAv/UYErXbZMRzkper4JE0y8eavifTJJTaMAfLeVQuH9FcFl33itJ27NlBfVY1y8BHfb0pGuZJdrMv/LiIyDqdGFNPCprTrnuTuM8R0OMgryE/TYBuPpl0i5bM3MBIi2IIbJWjYEoH9Mg+qUuPcv14gTcnS93PLI0FQBc= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: eca9f5b0-c2a7-4ab4-ef47-08d633d55b2b X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Oct 2018 02:07:57.5785 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB3946 Subject: [dpdk-dev] [PATCH 4/5] net/mlx5: fix wildcard item for Direct Verbs 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" If a network layer is specified with no spec, it means wildcard match. flow_dv_translate_item_*() returns without writing anything if spec is null and it causes creation of wrong flow. E.g., the following flow has to patch with any ipv4 packet. flow create 0 ingress pattern eth / ipv4 / end actions ... But, with the current code, it matches any packet because PMD doesn't write anything about IPv4. The matcher value and mask becomes completely zero. It should have written the IP version at least. It is same for the rest of items. Even if the spec is null, PMD has to write constant fields before return, e.g. IP version and IP protocol number. Fixes: fc2c498ccb94 ("net/mlx5: add Direct Verbs translate items") Cc: orika@mellanox.com Signed-off-by: Yongseok Koh Acked-by: Ori Kam --- drivers/net/mlx5/mlx5_flow_dv.c | 55 ++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index ea8e1f4831..0c09ac8026 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -2,7 +2,6 @@ * Copyright 2018 Mellanox Technologies, Ltd */ - #include #include #include @@ -474,10 +473,6 @@ flow_dv_translate_item_ipv4(void *matcher, void *key, char *l24_v; uint8_t tos; - if (!ipv4_v) - return; - if (!ipv4_m) - ipv4_m = &nic_mask; if (inner) { headers_m = MLX5_ADDR_OF(fte_match_param, matcher, inner_headers); @@ -489,6 +484,10 @@ flow_dv_translate_item_ipv4(void *matcher, void *key, } MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_version, 0xf); MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_version, 4); + if (!ipv4_v) + return; + if (!ipv4_m) + ipv4_m = &nic_mask; l24_m = MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_m, dst_ipv4_dst_ipv6.ipv4_layout.ipv4); l24_v = MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_v, @@ -557,10 +556,6 @@ flow_dv_translate_item_ipv6(void *matcher, void *key, int i; int size; - if (!ipv6_v) - return; - if (!ipv6_m) - ipv6_m = &nic_mask; if (inner) { headers_m = MLX5_ADDR_OF(fte_match_param, matcher, inner_headers); @@ -570,6 +565,12 @@ flow_dv_translate_item_ipv6(void *matcher, void *key, outer_headers); headers_v = MLX5_ADDR_OF(fte_match_param, key, outer_headers); } + MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_version, 0xf); + MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_version, 6); + if (!ipv6_v) + return; + if (!ipv6_m) + ipv6_m = &nic_mask; size = sizeof(ipv6_m->hdr.dst_addr); l24_m = MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_m, dst_ipv4_dst_ipv6.ipv6_layout.ipv6); @@ -585,8 +586,6 @@ flow_dv_translate_item_ipv6(void *matcher, void *key, memcpy(l24_m, ipv6_m->hdr.src_addr, size); for (i = 0; i < size; ++i) l24_v[i] = l24_m[i] & ipv6_v->hdr.src_addr[i]; - MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_version, 0xf); - MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_version, 6); /* TOS. */ vtc_m = rte_be_to_cpu_32(ipv6_m->hdr.vtc_flow); vtc_v = rte_be_to_cpu_32(ipv6_m->hdr.vtc_flow & ipv6_v->hdr.vtc_flow); @@ -635,10 +634,6 @@ flow_dv_translate_item_tcp(void *matcher, void *key, void *headers_m; void *headers_v; - if (!tcp_v) - return; - if (!tcp_m) - tcp_m = &rte_flow_item_tcp_mask; if (inner) { headers_m = MLX5_ADDR_OF(fte_match_param, matcher, inner_headers); @@ -650,6 +645,10 @@ flow_dv_translate_item_tcp(void *matcher, void *key, } MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_protocol, 0xff); MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol, IPPROTO_TCP); + if (!tcp_v) + return; + if (!tcp_m) + tcp_m = &rte_flow_item_tcp_mask; MLX5_SET(fte_match_set_lyr_2_4, headers_m, tcp_sport, rte_be_to_cpu_16(tcp_m->hdr.src_port)); MLX5_SET(fte_match_set_lyr_2_4, headers_v, tcp_sport, @@ -682,10 +681,6 @@ flow_dv_translate_item_udp(void *matcher, void *key, void *headers_m; void *headers_v; - if (!udp_v) - return; - if (!udp_m) - udp_m = &rte_flow_item_udp_mask; if (inner) { headers_m = MLX5_ADDR_OF(fte_match_param, matcher, inner_headers); @@ -697,6 +692,10 @@ flow_dv_translate_item_udp(void *matcher, void *key, } MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_protocol, 0xff); MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol, IPPROTO_UDP); + if (!udp_v) + return; + if (!udp_m) + udp_m = &rte_flow_item_udp_mask; MLX5_SET(fte_match_set_lyr_2_4, headers_m, udp_sport, rte_be_to_cpu_16(udp_m->hdr.src_port)); MLX5_SET(fte_match_set_lyr_2_4, headers_v, udp_sport, @@ -731,10 +730,6 @@ flow_dv_translate_item_gre(void *matcher, void *key, void *misc_m = MLX5_ADDR_OF(fte_match_param, matcher, misc_parameters); void *misc_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters); - if (!gre_v) - return; - if (!gre_m) - gre_m = &rte_flow_item_gre_mask; if (inner) { headers_m = MLX5_ADDR_OF(fte_match_param, matcher, inner_headers); @@ -746,6 +741,10 @@ flow_dv_translate_item_gre(void *matcher, void *key, } MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_protocol, 0xff); MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol, IPPROTO_GRE); + if (!gre_v) + return; + if (!gre_m) + gre_m = &rte_flow_item_gre_mask; MLX5_SET(fte_match_set_misc, misc_m, gre_protocol, rte_be_to_cpu_16(gre_m->protocol)); MLX5_SET(fte_match_set_misc, misc_v, gre_protocol, @@ -780,6 +779,7 @@ flow_dv_translate_item_nvgre(void *matcher, void *key, int size; int i; + flow_dv_translate_item_gre(matcher, key, item, inner); if (!nvgre_v) return; if (!nvgre_m) @@ -790,7 +790,6 @@ flow_dv_translate_item_nvgre(void *matcher, void *key, memcpy(gre_key_m, tni_flow_id_m, size); for (i = 0; i < size; ++i) gre_key_v[i] = gre_key_m[i] & tni_flow_id_v[i]; - flow_dv_translate_item_gre(matcher, key, item, inner); } /** @@ -822,10 +821,6 @@ flow_dv_translate_item_vxlan(void *matcher, void *key, int size; int i; - if (!vxlan_v) - return; - if (!vxlan_m) - vxlan_m = &rte_flow_item_vxlan_mask; if (inner) { headers_m = MLX5_ADDR_OF(fte_match_param, matcher, inner_headers); @@ -841,6 +836,10 @@ flow_dv_translate_item_vxlan(void *matcher, void *key, MLX5_SET(fte_match_set_lyr_2_4, headers_m, udp_dport, 0xFFFF); MLX5_SET(fte_match_set_lyr_2_4, headers_v, udp_dport, dport); } + if (!vxlan_v) + return; + if (!vxlan_m) + vxlan_m = &rte_flow_item_vxlan_mask; size = sizeof(vxlan_m->vni); vni_m = MLX5_ADDR_OF(fte_match_set_misc, misc_m, vxlan_vni); vni_v = MLX5_ADDR_OF(fte_match_set_misc, misc_v, vxlan_vni);