From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0085.outbound.protection.outlook.com [104.47.2.85]) by dpdk.org (Postfix) with ESMTP id 34D38AACB for ; Tue, 5 Jun 2018 02:38:42 +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=d98KJ4nq3JattOuKOPtzZIEYiXVLaGtKqawYUG+/Hzc=; b=usSlufSeh0I5qvuLnzeVw5aplfOfUrhCZn5sFmJK/LlTxAFpKwBDLnmt8Rb63UhVP+Wuv53EEtB1oE2B9+QGfrUfpBrNrxbZQKLdvw7EDg4pd6xWeHqD9UXXPHz2zMWE79F4jomV5ysL2i+I7mkaC0UEys0s4N1y8RkUxrDEeMo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by DB6PR0501MB2037.eurprd05.prod.outlook.com (2603:10a6:4:6::19) 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:38:39 +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:38:07 -0700 Message-Id: <20180605003811.14448-6-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180605003811.14448-1-yskoh@mellanox.com> References: <20180605002732.13866-1-yskoh@mellanox.com> <20180605003811.14448-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: BYAPR02CA0008.namprd02.prod.outlook.com (2603:10b6:a02:ee::21) To DB6PR0501MB2037.eurprd05.prod.outlook.com (2603:10a6:4:6::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB6PR0501MB2037; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2037; 3:yY8dO4aWcGrt2+ZvJxYqvhAKjiePgReeDNFot4NScIXsdog72eR94AB0gbVt+Brj/OmEZVTRL6X69YNP343rNfLvK3AzOYaa67B8VkEsja3Cz4LuP4tMQyqyHAlPHV97GzrV/0bnipx/56s1dM2SHP/Jpmua7RiqJw9THaJ7iYP4t5L6l7MUN3FqWH0nTF5yw8IZkFz6EPrxybKmjARXBE3thF4nRG1+uTvMyYt3h8+HubiL2NwHSZex6QmP0kgD; 25:jvdkiZ7zIAMXXFa0Ct/jqYVM4Ka/zWrLuhZjrQJ9eRfyB3o/+LFNbOblaajqu/6HldGyOFC5y4zWayKydpmmLfJnqkcrxPXJb6VZL29zCXuB+md3gTvSTSmeLjUfYkAUa+j0pplrgqXrl0qJLyW8W83TZ5pbm2jJKN2DQJPzxc074RlINCTRIZTR0z11S+SESARHXjpfWJAHQvxOnVqZHfXyOwa1BTkU9Uvs8hbhiZ3DqK3Yb7F8tBnzDFI+6L6aAtvD9ekfnuEHDqCngKbeRJPiSKNInxYLMX4P5iVYt4u/11k4PKkuFLwSzB8pT8PndagDUST4FkpOudN938c2Kg==; 31:kUvK4flQVGvrXymHE9/uSylXhzDuaJaSYcKdko9ydmRoQjGwDIZOkZY1wEy+ILtble8lRWuUnCIoM0ngnYESyaC9S/eofY74wbX3ke15kuGFl1V9eRJoYC1uVhc8ajvbkMpmFUUl26hXbjsqji5JfoJRg1FJMKEowdVOLyG8oUkdRrIYfkl86Z4fbnXL52HfSFroUc5pYwQmJUu5jCY4PAOE9wqUJ+FdUyJlK9bRUyk= X-MS-TrafficTypeDiagnostic: DB6PR0501MB2037: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2037; 20:fO96H24LykUqS7sL7tplRBzMykbIATzMPxs4l70nujqzO1FRsWlkgdzBUFt0OLKIKOS965zekYDNuNwheQ/nXx77wNalpTxqpHkkkUegjYp5K7Bti28aa4HbA9f3phuHgJQlNguy/RcZTlv7oOiYyx38XtmlgqA+/T3Z9YibzybU9X6KS6VKHdNf32tzjvG5pV1/K2LdCFMA3frdVRpW7AaxOpea7IScAprNAddyAsMyA+kVYEHhHFn/9fd4osXETfGChf02WU0wfvHGaC6/HHNnJHjvqR2txiSHQ2N5M+heu/QT5c9DhaTgAsKycXwwmM5sdMyOYsDJmONX9v+TijvWqBBNDJjh2Vj3rdcHiLSONsLRHJVq8RjgfU4NJRdFdr/TxadhQyTAbh3Z13zYgkg6vBrTxksqhgfZxJKUEqyx8RIRhsBvRAPzwOETVB3JlZE6T0tqqy0DEyQb9jbXKpXjZdEsANPUZ2s8p49w/59E99lt0v/t2/DUC+n6Mn13; 4:chqddqbzmtEfgDFG3rwLyoe8Q0H4XWdMh1BTOpC7LyPbk+7STeTbjKpvNFHRvrsFsNx/JRLk2SvkecjAzXgrbU6yytGuiw6Y76w/cb20K0cG6OA6eeonrznRA6/EOCvScpfVZVO6mBQIr1J31QcDVSapgXBZjQ+WsymebXpGw1cYtz9u5ZDxvIdwW+PGVnzCJWzNtDhiBD3+7I6ej8mkmz6EROjThud7oTUlFp7BSfN0H/152CadeeH/6ptSMd+IU9TadAdKMJKGtw9EV+LwVA== 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)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:DB6PR0501MB2037; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0501MB2037; X-Forefront-PRVS: 0694C54398 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(39860400002)(366004)(346002)(39380400002)(376002)(189003)(199004)(186003)(68736007)(26005)(69596002)(21086003)(2616005)(476003)(4326008)(486006)(81166006)(81156014)(1076002)(50226002)(386003)(316002)(2870700001)(53936002)(2906002)(956004)(106356001)(105586002)(11346002)(446003)(86362001)(478600001)(6666003)(36756003)(7736002)(23676004)(52116002)(7696005)(305945005)(6916009)(76176011)(66066001)(25786009)(55016002)(8936002)(16526019)(8676002)(2361001)(6116002)(47776003)(3846002)(97736004)(2351001)(5660300001)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0501MB2037; 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?MTtEQjZQUjA1MDFNQjIwMzc7MjM6c2pVN2dBQURYNTBLbTJXc00rOGZIdTZk?= =?utf-8?B?bEJPdTRKdEtvbGY3TFBRZnZLSmJQSzBFUHo0MjlvZHl0aVZsR0RGZ3U1MnhK?= =?utf-8?B?VjQwUjJCR1doWnA4OWZkZWRPM00zM2RDNDMzYkpvOFF3Zk1DRy8wUXkzVkFx?= =?utf-8?B?WmxDMnFyZkljeUtjd2J2eGhFV1E5RmMzdU9XSGZoSjdWZHc3VlJYcklRWnFP?= =?utf-8?B?NVVacWJPMFZKdGRKYW5uZmdCdTV6L2R2U3hPQUFLNFh5cW1rNExZVE5uTUx5?= =?utf-8?B?ZVVmVDJmcExoUzhMc2R1YWsvVUdlTHB1eEFWMURBQzlQRy9iL1VkbTFYV2l1?= =?utf-8?B?VTY1b0JhVjhrelVCUE1LbVh4bWZBcUxwY1VXcWZJckVVZkdHU3lWM3RmWXM1?= =?utf-8?B?QlVQK2VlNFZXMHMwWC93ZTVwdVpYdlpWWmpzcGR0OUQ3clN4Mnl4MHhySXpQ?= =?utf-8?B?bTg2VG4zbjRDZWNid3R6SzZIK0ZTZ3VsSjl4ZTk3cFZzUVVqR2gxWFV2L3Fx?= =?utf-8?B?Q3hxUmFxTVFibThKSnYwYXNHR2srb0JzZ3FJU0t1Tk1ESXVTZ0xnNllyQ2x5?= =?utf-8?B?VHh6MGhGUVRHRXJuWm1RcnRzL0oyVmpMQ1EyYndnU2N5VVFUTEdZM1Q3ZXhq?= =?utf-8?B?VkxmYUF3WHpsR3A5cDZqNFI3SDcvaVV3NkQ1NnBKWGgzWFkwRTJKUDJmLzA3?= =?utf-8?B?NnRmb2xaUmJnSzE0ZHoyV2ZzWDQ4QU5oTEVCdER4OTEwRG5jWEVHK0Q1bnVn?= =?utf-8?B?cm9hTytmejNNbkhTem11Q1hKakpsUGFVb3RtU21iTnp3QUx4N3lsWFV2TVNG?= =?utf-8?B?RGU0ZGo1ZGJQUUZpb0FRdzlVMnFBOEo0RGNDU1A4emsva1JWM3R5ZDhKbTZw?= =?utf-8?B?UWFUdEdndzlON1drMjRyQkFSMHRvTnQ3ek5YV3VLcER6cjk3LzdYd0R2aGN5?= =?utf-8?B?WnlwVkZUS1ZQZVhvK3hRa1J1Wk9MWmVwN3JWbk9oSCtQUjJXR3l6OFhKSnN6?= =?utf-8?B?Um1zMjJ4bERqb2RhQkRDQjFNMmdlMUQxYURoaVVmNlRIZk5GZENIMnAxZkdE?= =?utf-8?B?SHRwb1NKcEF4aEl4SWE5N1hvanJ5Zyt3SmVmaE05V0x0UE9SekJtWm9uZkhV?= =?utf-8?B?NVJjQlc0dE5PNE9hWm5kbmZZNWJ1dmhqS3VYRDJ1anloK2pxVmtYc05oN2x2?= =?utf-8?B?NE9BWjg3KzIzTmVCTFlKc2lzZE1rQXZhR2ZBdVBvK0hQaXBGYTBqOG5TRS96?= =?utf-8?B?WTV0aWdTR3N0V0ZzOVJDY0VGd0c3d3R2TkFrQTd6Y01DUlpncTZJVERHN2ZS?= =?utf-8?B?dFlmSHlpVXFyNUZLRGNwelpDZEppSDJYd2x4dGZ5NjlHUUJTMFBUR2ZONnlT?= =?utf-8?B?UjZUeFlvUVdTditBTjFkU0Y0cURBaHBjMXZSa1JIWTlieVcyM3dreXFrRTFM?= =?utf-8?B?MXc3K2U5UzYrVGdiVE5qZWdIcThHQUx1dmFUMWtTa2I2YjYvTEtzaVZwNjVu?= =?utf-8?B?TlUvSWhSaTVqNnJGc2JVTUhBcS92Y3duMU1Ickc2S3Y3VTR4M3BZY3lrR0Rh?= =?utf-8?B?bVMzeXpDemxBV1lva0Nrd01VRldtZHE4STJxb1dxQkt1MkgweWZicGtoWHJF?= =?utf-8?B?azFMSmo5UHNxcm5nSzh0ZnFDbmx2dVBkaWNEdzdKdkhKTFg2M043ZDhZRVIx?= =?utf-8?Q?3VHdp1PrJiC+RQSIb7Ow=3D?= X-Microsoft-Antispam-Message-Info: okg1CnG0450858byhjW6bHaPFU3Y89CPgO9IQbVcDHcWKNGG/v2haR49lyAqH2wQJXKY1ogBDVbWAL/tINYqYYS4ACvEHHuz2tsjIUEC6sPYeuSIOGsfDL9pzRGjV9NLenp+x2Pr8pqGfaRXszpUcPolmXsmmDsosCQSB9ODyXNTOIgvcbFrABV6taY0yx9U X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2037; 6:Ti99nb5TjpdefiTUdmDgUM7wPtmCLPkv8CE50Hv9p7vaxNnrAATi99KvIyqiVP4ITlaX/QmBdUghQC49KiTuTVdmJFvy3Kc7BpCHrQKV3igMKdzzjNnEasTavpSoaTrhtWettFg7uEOd3ot/gWGv2ZtanG/d+wGQkqIiqak3LDp+uTCdd5Xv3WonY5jyFfjNOY4MUhBuhww4SadhciehC7zK/TDuMEVKyMzrPb94TKAm9NdOlEDtdopZMYF+qNJ+T4oZJ6qO18M3M020Vis1gWGM2uBB3HG/lvWHd52I+vfNQVANVLj8JVRty6yVLuc/mQRfMxp7vclQtelFSIJdDVBmmLBpQA8guhuHqwYIkN5TXekN1YJW4y6bSpToinmu2k9RyJVfCroymHfIFiW94K1aLrnY0JLx4wFYdHHVVkan9n/efiLOS1+UwJTsvHgTM76aqp/jz9yE089zfjYfHQ==; 5:IkE1aDF/RxLSoWmN6u+ZyjLAnbB02WQ46mFF2zEgTbwahgQrmaCrOITqsrAl84b380PYoiiBvGdPHZCkJObEiOjmV5pab7Npf8kgJTru+vp3obQhRXhLB0F/2jLXJR4pVLSdfl4yMGO//Ouq1UYs/xQoWvnA+ITV1/Eu1Y0pgzI=; 24:JcwTd698MLCfP0qPAPRwxs+eKPSz3pLZuYPr3UGTNVVjVpzEskPh0IC9RHkMrsUbN+vWWPNNmqId9cw/DuKOWuayGTPq9UyHQQGT3dIL5Q8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2037; 7:Di8X4nLuVN+l+m7GZL0QfZehB9410VYHH7xNHQu3r3Arq46GQjb2M9GggIQqw4ZqMmT814rpDk97qdqxN8YFbGVxA4/0qrE094w+4+H9GDepxSKtsaUWaraCaFf5PrKnhblTIq3HS9cnooNLjESaBUH50DkFT04BXI/JU42oVT128rJSSXcS1FaOQOaL2nPRnCYfDN9E4p+3POMD2/mV2blCXz5YQoV4HDleKUPJtdHHaRE4JQXqR0mvmKmjE4dS X-MS-Office365-Filtering-Correlation-Id: bc2c7daa-f400-4391-6b2e-08d5ca7caf69 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2018 00:38:39.9080 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bc2c7daa-f400-4391-6b2e-08d5ca7caf69 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0501MB2037 Subject: [dpdk-stable] [PATCH v2 35/67] net/mlx5: improve flow error explanation 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:38:42 -0000 From: NĂ©lio Laranjeiro [ upstream commit fca13017680e538c5fe01f44e69fe01ce1609181 ] Fill the error context in conversion function to provide a better reason on why it cannot be done to the user. Signed-off-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5_flow.c | 72 ++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index c150ad52b..c5111de7b 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -83,40 +83,46 @@ ibv_destroy_counter_set(struct ibv_counter_set *cs) extern const struct eth_dev_ops mlx5_dev_ops; extern const struct eth_dev_ops mlx5_dev_ops_isolate; +/** Structure give to the conversion functions. */ +struct mlx5_flow_data { + struct mlx5_flow_parse *parser; /** Parser context. */ + struct rte_flow_error *error; /** Error context. */ +}; + static int mlx5_flow_create_eth(const struct rte_flow_item *item, const void *default_mask, - void *data); + struct mlx5_flow_data *data); static int mlx5_flow_create_vlan(const struct rte_flow_item *item, const void *default_mask, - void *data); + struct mlx5_flow_data *data); static int mlx5_flow_create_ipv4(const struct rte_flow_item *item, const void *default_mask, - void *data); + struct mlx5_flow_data *data); static int mlx5_flow_create_ipv6(const struct rte_flow_item *item, const void *default_mask, - void *data); + struct mlx5_flow_data *data); static int mlx5_flow_create_udp(const struct rte_flow_item *item, const void *default_mask, - void *data); + struct mlx5_flow_data *data); static int mlx5_flow_create_tcp(const struct rte_flow_item *item, const void *default_mask, - void *data); + struct mlx5_flow_data *data); static int mlx5_flow_create_vxlan(const struct rte_flow_item *item, const void *default_mask, - void *data); + struct mlx5_flow_data *data); struct mlx5_flow_parse; @@ -291,7 +297,7 @@ struct mlx5_flow_items { */ int (*convert)(const struct rte_flow_item *item, const void *default_mask, - void *data); + struct mlx5_flow_data *data); /** Size in bytes of the destination structure. */ const unsigned int dst_sz; /** List of possible following items. */ @@ -1157,6 +1163,11 @@ mlx5_flow_convert(struct rte_eth_dev *dev, /* Third step. Conversion parse, fill the specifications. */ parser->inner = 0; for (; items->type != RTE_FLOW_ITEM_TYPE_END; ++items) { + struct mlx5_flow_data data = { + .parser = parser, + .error = error, + }; + if (items->type == RTE_FLOW_ITEM_TYPE_VOID) continue; cur_item = &mlx5_flow_items[items->type]; @@ -1164,13 +1175,9 @@ mlx5_flow_convert(struct rte_eth_dev *dev, (cur_item->default_mask ? cur_item->default_mask : cur_item->mask), - parser); - if (ret) { - rte_flow_error_set(error, rte_errno, - RTE_FLOW_ERROR_TYPE_ITEM, - items, "item not supported"); + &data); + if (ret) goto exit_free; - } } if (parser->mark) mlx5_flow_create_flag_mark(parser, parser->mark_id); @@ -1263,11 +1270,11 @@ mlx5_flow_create_copy(struct mlx5_flow_parse *parser, void *src, static int mlx5_flow_create_eth(const struct rte_flow_item *item, const void *default_mask, - void *data) + struct mlx5_flow_data *data) { const struct rte_flow_item_eth *spec = item->spec; const struct rte_flow_item_eth *mask = item->mask; - struct mlx5_flow_parse *parser = (struct mlx5_flow_parse *)data; + struct mlx5_flow_parse *parser = data->parser; const unsigned int eth_size = sizeof(struct ibv_flow_spec_eth); struct ibv_flow_spec_eth eth = { .type = parser->inner | IBV_FLOW_SPEC_ETH, @@ -1315,11 +1322,11 @@ mlx5_flow_create_eth(const struct rte_flow_item *item, static int mlx5_flow_create_vlan(const struct rte_flow_item *item, const void *default_mask, - void *data) + struct mlx5_flow_data *data) { const struct rte_flow_item_vlan *spec = item->spec; const struct rte_flow_item_vlan *mask = item->mask; - struct mlx5_flow_parse *parser = (struct mlx5_flow_parse *)data; + struct mlx5_flow_parse *parser = data->parser; struct ibv_flow_spec_eth *eth; const unsigned int eth_size = sizeof(struct ibv_flow_spec_eth); @@ -1358,11 +1365,11 @@ mlx5_flow_create_vlan(const struct rte_flow_item *item, static int mlx5_flow_create_ipv4(const struct rte_flow_item *item, const void *default_mask, - void *data) + struct mlx5_flow_data *data) { const struct rte_flow_item_ipv4 *spec = item->spec; const struct rte_flow_item_ipv4 *mask = item->mask; - struct mlx5_flow_parse *parser = (struct mlx5_flow_parse *)data; + struct mlx5_flow_parse *parser = data->parser; unsigned int ipv4_size = sizeof(struct ibv_flow_spec_ipv4_ext); struct ibv_flow_spec_ipv4_ext ipv4 = { .type = parser->inner | IBV_FLOW_SPEC_IPV4_EXT, @@ -1413,11 +1420,11 @@ mlx5_flow_create_ipv4(const struct rte_flow_item *item, static int mlx5_flow_create_ipv6(const struct rte_flow_item *item, const void *default_mask, - void *data) + struct mlx5_flow_data *data) { const struct rte_flow_item_ipv6 *spec = item->spec; const struct rte_flow_item_ipv6 *mask = item->mask; - struct mlx5_flow_parse *parser = (struct mlx5_flow_parse *)data; + struct mlx5_flow_parse *parser = data->parser; unsigned int ipv6_size = sizeof(struct ibv_flow_spec_ipv6); struct ibv_flow_spec_ipv6 ipv6 = { .type = parser->inner | IBV_FLOW_SPEC_IPV6, @@ -1472,11 +1479,11 @@ mlx5_flow_create_ipv6(const struct rte_flow_item *item, static int mlx5_flow_create_udp(const struct rte_flow_item *item, const void *default_mask, - void *data) + struct mlx5_flow_data *data) { const struct rte_flow_item_udp *spec = item->spec; const struct rte_flow_item_udp *mask = item->mask; - struct mlx5_flow_parse *parser = (struct mlx5_flow_parse *)data; + struct mlx5_flow_parse *parser = data->parser; unsigned int udp_size = sizeof(struct ibv_flow_spec_tcp_udp); struct ibv_flow_spec_tcp_udp udp = { .type = parser->inner | IBV_FLOW_SPEC_UDP, @@ -1521,11 +1528,11 @@ mlx5_flow_create_udp(const struct rte_flow_item *item, static int mlx5_flow_create_tcp(const struct rte_flow_item *item, const void *default_mask, - void *data) + struct mlx5_flow_data *data) { const struct rte_flow_item_tcp *spec = item->spec; const struct rte_flow_item_tcp *mask = item->mask; - struct mlx5_flow_parse *parser = (struct mlx5_flow_parse *)data; + struct mlx5_flow_parse *parser = data->parser; unsigned int tcp_size = sizeof(struct ibv_flow_spec_tcp_udp); struct ibv_flow_spec_tcp_udp tcp = { .type = parser->inner | IBV_FLOW_SPEC_TCP, @@ -1570,11 +1577,11 @@ mlx5_flow_create_tcp(const struct rte_flow_item *item, static int mlx5_flow_create_vxlan(const struct rte_flow_item *item, const void *default_mask, - void *data) + struct mlx5_flow_data *data) { const struct rte_flow_item_vxlan *spec = item->spec; const struct rte_flow_item_vxlan *mask = item->mask; - struct mlx5_flow_parse *parser = (struct mlx5_flow_parse *)data; + struct mlx5_flow_parse *parser = data->parser; unsigned int size = sizeof(struct ibv_flow_spec_tunnel); struct ibv_flow_spec_tunnel vxlan = { .type = parser->inner | IBV_FLOW_SPEC_VXLAN_TUNNEL, @@ -1605,10 +1612,11 @@ mlx5_flow_create_vxlan(const struct rte_flow_item *item, * before will also match this rule. * To avoid such situation, VNI 0 is currently refused. */ - if (!vxlan.val.tunnel_id) { - rte_errno = EINVAL; - return -rte_errno; - } + if (!vxlan.val.tunnel_id) + return rte_flow_error_set(data->error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "VxLAN vni cannot be 0"); mlx5_flow_create_copy(parser, &vxlan, size); return 0; } -- 2.11.0