suricata
util-dpdk-ixgbe.c
Go to the documentation of this file.
1 /* Copyright (C) 2021-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 Intel IXGBE driver helpers functions
20  *
21  * @{
22  */
23 
24 /**
25  * \file
26  *
27  * \author Lukas Sismis <lukas.sismis@gmail.com>
28  *
29  * DPDK driver's helper functions
30  *
31  */
32 
33 #include "util-dpdk-ixgbe.h"
34 #include "util-dpdk.h"
35 #include "util-debug.h"
36 #include "util-dpdk-bonding.h"
37 #include "util-dpdk-rss.h"
38 
39 #ifdef HAVE_DPDK
40 
41 #define IXGBE_RSS_HKEY_LEN 40
42 
43 void ixgbeDeviceSetRSSHashFunction(uint64_t *rss_hf)
44 {
45  *rss_hf = RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_IPV6_EX;
46 }
47 
48 int ixgbeDeviceSetRSS(int port_id, int nb_rx_queues, char *port_name)
49 {
50  uint16_t queues[RTE_MAX_QUEUES_PER_PORT];
51  struct rte_flow_error flush_error = { 0 };
52  struct rte_eth_rss_conf rss_conf = {
53  .rss_key = RSS_HKEY,
54  .rss_key_len = IXGBE_RSS_HKEY_LEN,
55  };
56 
57  if (nb_rx_queues < 1) {
58  FatalError("The number of queues for RSS configuration must be "
59  "configured with a positive number");
60  }
61 
62  struct rte_flow_action_rss rss_action_conf =
63  DPDKInitRSSAction(rss_conf, nb_rx_queues, queues, RTE_ETH_HASH_FUNCTION_DEFAULT, true);
64 
65  int retval = DPDKCreateRSSFlowGeneric(port_id, port_name, rss_action_conf);
66  if (retval != 0) {
67  retval = rte_flow_flush(port_id, &flush_error);
68  if (retval != 0) {
69  SCLogError("%s: unable to flush rte_flow rules: %s Flush error msg: %s", port_name,
70  rte_strerror(-retval), flush_error.message);
71  }
72  return retval;
73  }
74 
75  return 0;
76 }
77 
78 #endif /* HAVE_DPDK */
79 /**
80  * @}
81  */
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-ixgbe.h