suricata
util-dpdk-mlx5.c
Go to the documentation of this file.
1 /* Copyright (C) 2025 Open Information Security Foundation
2  *
3  * You can copy, redistribute or modify this Program under the terms of
4  * the GNU General Public License version 2 as published by the Free
5  * Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * version 2 along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15  * 02110-1301, USA.
16  */
17 
18 /**
19  * \defgroup dpdk DPDK NVIDIA mlx5 driver helpers functions
20  *
21  * @{
22  */
23 
24 /**
25  * \file
26  *
27  * \author Adam Kiripolsky <adam.kiripolsky@cesnet.cz>
28  *
29  * DPDK driver's helper functions
30  *
31  */
32 
33 #include "util-debug.h"
34 #include "util-dpdk.h"
35 #include "util-dpdk-bonding.h"
36 #include "util-dpdk-mlx5.h"
37 #include "util-dpdk-rss.h"
38 
39 #ifdef HAVE_DPDK
40 
41 #define MLX5_RSS_HKEY_LEN 40
42 
43 int mlx5DeviceSetRSS(int port_id, int nb_rx_queues, char *port_name)
44 {
45  uint16_t queues[RTE_MAX_QUEUES_PER_PORT];
46  struct rte_flow_error flush_error = { 0 };
47  struct rte_eth_rss_conf rss_conf = {
48  .rss_key = RSS_HKEY,
49  .rss_key_len = MLX5_RSS_HKEY_LEN,
50  };
51 
52  if (nb_rx_queues < 1) {
53  FatalError("The number of queues for RSS configuration must be "
54  "configured with a positive number");
55  }
56 
57  struct rte_flow_action_rss rss_action_conf =
58  DPDKInitRSSAction(rss_conf, nb_rx_queues, queues, RTE_ETH_HASH_FUNCTION_TOEPLITZ, true);
59 
60  int retval = DPDKCreateRSSFlowGeneric(port_id, port_name, rss_action_conf);
61  if (retval != 0) {
62  retval = rte_flow_flush(port_id, &flush_error);
63  if (retval != 0) {
64  SCLogError("%s: unable to flush rte_flow rules: %s Flush error msg: %s", port_name,
65  rte_strerror(-retval), flush_error.message);
66  }
67  return retval;
68  }
69 
70  return 0;
71 }
72 
73 #endif /* HAVE_DPDK */
74 /**
75  * @}
76  */
util-dpdk-rss.h
util-debug.h
util-dpdk.h
FatalError
#define FatalError(...)
Definition: util-debug.h:502
SCLogError
#define SCLogError(...)
Macro used to log ERROR messages.
Definition: util-debug.h:261
util-dpdk-bonding.h
util-dpdk-mlx5.h