#define DPDK_CONFIG_DEFAULT_MULTICAST_MODE 1
#define DPDK_CONFIG_DEFAULT_CHECKSUM_VALIDATION 1
#define DPDK_CONFIG_DEFAULT_CHECKSUM_VALIDATION_OFFLOAD 1
+#define DPDK_CONFIG_DEFAULT_VLAN_STRIP 0
#define DPDK_CONFIG_DEFAULT_COPY_MODE "none"
#define DPDK_CONFIG_DEFAULT_COPY_INTERFACE "none"
.checksum_checks = "checksum-checks",
.checksum_checks_offload = "checksum-checks-offload",
.mtu = "mtu",
+ .vlan_strip_offload = "vlan-strip-offload",
.rss_hf = "rss-hash-functions",
.mempool_size = "mempool-size",
.mempool_cache_size = "mempool-cache-size",
SCReturnInt(0);
}
+static void ConfigSetVlanStrip(DPDKIfaceConfig *iconf, int entry_bool)
+{
+ SCEnter();
+ iconf->vlan_strip_enabled = entry_bool;
+ SCReturn;
+}
+
static int ConfigSetCopyIface(DPDKIfaceConfig *iconf, const char *entry_str)
{
SCEnter();
if (retval < 0)
SCReturnInt(retval);
+ retval = ConfGetChildValueBoolWithDefault(
+ if_root, if_default, dpdk_yaml.vlan_strip_offload, &entry_bool);
+ if (retval != 1) {
+ ConfigSetVlanStrip(iconf, DPDK_CONFIG_DEFAULT_VLAN_STRIP);
+ } else {
+ ConfigSetVlanStrip(iconf, entry_bool);
+ }
+
retval = ConfGetChildValueWithDefault(if_root, if_default, dpdk_yaml.copy_mode, ©_mode_str);
if (retval != 1)
SCReturnInt(-ENOENT);
}
}
+static void PortConfSetVlanOffload(const DPDKIfaceConfig *iconf,
+ const struct rte_eth_dev_info *dev_info, struct rte_eth_conf *port_conf)
+{
+ if (iconf->vlan_strip_enabled) {
+ if (dev_info->rx_offload_capa & RTE_ETH_RX_OFFLOAD_VLAN_STRIP) {
+ port_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_VLAN_STRIP;
+ SCLogConfig("%s: hardware VLAN stripping enabled", iconf->iface);
+ } else {
+ SCLogWarning("%s: hardware VLAN stripping enabled but not supported, disabling",
+ iconf->iface);
+ }
+ }
+}
+
static void DeviceInitPortConf(const DPDKIfaceConfig *iconf,
const struct rte_eth_dev_info *dev_info, struct rte_eth_conf *port_conf)
{
PortConfSetRSSConf(iconf, dev_info, port_conf);
PortConfSetChsumOffload(iconf, dev_info, port_conf);
DeviceSetMTU(port_conf, iconf->mtu);
+ PortConfSetVlanOffload(iconf, dev_info, port_conf);
if (dev_info->tx_offload_capa & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE) {
port_conf->txmode.offloads |= RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE;
checksum-checks: true # if Suricata should validate checksums
checksum-checks-offload: true # if possible offload checksum validation to the NIC (saves Suricata resources)
mtu: 1500 # Set MTU of the device in bytes
+ vlan-strip-offload: false # if possible enable hardware vlan stripping
# rss-hash-functions: 0x0 # advanced configuration option, use only if you use untested NIC card and experience RSS warnings,
# For `rss-hash-functions` use hexadecimal 0x01ab format to specify RSS hash function flags - DumpRssFlags can help (you can see output if you use -vvv option during Suri startup)
# setting auto to rss_hf sets the default RSS hash functions (based on IP addresses)
checksum-checks: true
checksum-checks-offload: true
mtu: 1500
+ vlan-strip-offload: false
rss-hash-functions: auto
mempool-size: 65535
mempool-cache-size: 257