diff --git a/src/Makefile.am b/src/Makefile.am index e4bdb2c649..e186b5a854 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -509,6 +509,7 @@ noinst_HEADERS = \ util-device.h \ util-dpdk.h \ util-dpdk-i40e.h \ + util-dpdk-ice.h \ util-dpdk-ixgbe.h \ util-ebpf.h \ util-enum.h \ @@ -1076,6 +1077,7 @@ libsuricata_c_a_SOURCES = \ util-device.c \ util-dpdk.c \ util-dpdk-i40e.c \ + util-dpdk-ice.c \ util-dpdk-ixgbe.c \ util-ebpf.c \ util-enum.c \ diff --git a/src/runmode-dpdk.c b/src/runmode-dpdk.c index 6dff8b6d83..64053e2026 100644 --- a/src/runmode-dpdk.c +++ b/src/runmode-dpdk.c @@ -39,6 +39,7 @@ #include "util-cpu.h" #include "util-dpdk.h" #include "util-dpdk-i40e.h" +#include "util-dpdk-ice.h" #include "util-dpdk-ixgbe.h" #ifdef HAVE_DPDK @@ -747,6 +748,8 @@ static void DeviceSetPMDSpecificRSS(struct rte_eth_rss_conf *rss_conf, const cha // RSS is configured in a specific way for a driver i40e and DPDK version <= 19.xx if (strcmp(driver_name, "net_i40e") == 0) i40eDeviceSetRSSHashFunction(&rss_conf->rss_hf); + if (strcmp(driver_name, "net_ice") == 0) + iceDeviceSetRSSHashFunction(&rss_conf->rss_hf); if (strcmp(driver_name, "net_ixgbe") == 0) ixgbeDeviceSetRSSHashFunction(&rss_conf->rss_hf); } diff --git a/src/util-dpdk-ice.c b/src/util-dpdk-ice.c new file mode 100644 index 0000000000..736361bd6c --- /dev/null +++ b/src/util-dpdk-ice.c @@ -0,0 +1,50 @@ +/* Copyright (C) 2021 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +/** + * \defgroup dpdk DPDK Intel ICE driver helpers functions + * + * @{ + */ + +/** + * \file + * + * \author Lukas Sismis + * + * DPDK driver's helper functions + * + */ + +#include "util-dpdk-ice.h" + +#ifdef HAVE_DPDK + +void iceDeviceSetRSSHashFunction(uint64_t *rss_hf) +{ + if (RTE_VER_YEAR <= 19) + *rss_hf = ETH_RSS_FRAG_IPV4 | ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_FRAG_IPV6 | + ETH_RSS_NONFRAG_IPV6_OTHER; + else + *rss_hf = ETH_RSS_IPV4 | ETH_RSS_FRAG_IPV4 | ETH_RSS_NONFRAG_IPV4_OTHER | ETH_RSS_IPV6 | + ETH_RSS_FRAG_IPV6 | ETH_RSS_NONFRAG_IPV6_OTHER; +} + +#endif /* HAVE_DPDK */ +/** + * @} + */ diff --git a/src/util-dpdk-ice.h b/src/util-dpdk-ice.h new file mode 100644 index 0000000000..0049dbcba5 --- /dev/null +++ b/src/util-dpdk-ice.h @@ -0,0 +1,36 @@ +/* Copyright (C) 2021 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +/** + * \file + * + * \author Lukas Sismis + */ + +#ifndef UTIL_DPDK_ICE_H +#define UTIL_DPDK_ICE_H + +#include "suricata-common.h" +#include "util-dpdk.h" + +#ifdef HAVE_DPDK + +void iceDeviceSetRSSHashFunction(uint64_t *rss_conf); + +#endif /* HAVE_DPDK */ + +#endif /* UTIL_DPDK_ICE_H */