dpdk: support multiple same EAL arguments

DPDK apps can specify multiple arguments of the same
type. YAML format only allows unique keys within a single
node. This commit adds support for multiple EAL arguments
of the same type to be used within suricata.yaml.

Ticket: #5964
pull/9035/head
liaozhiyuan 2 years ago committed by Victor Julien
parent e75956717d
commit a748164d58

@ -1965,6 +1965,7 @@ The whole DPDK configuration resides in the `dpdk:` node. This node encapsulates
dpdk: dpdk:
eal-params: eal-params:
proc-type: primary proc-type: primary
allow: ["0000:3b:00.0", "0000:3b:00.1"]
interfaces: interfaces:
- interface: 0000:3b:00.0 - interface: 0000:3b:00.0
threads: auto threads: auto
@ -1988,7 +1989,14 @@ are typically provided through the command line, are contained in the node
parameters. There are two ways to specify arguments: lengthy and short. parameters. There are two ways to specify arguments: lengthy and short.
Dashes are omitted when describing the arguments. This setup node can be Dashes are omitted when describing the arguments. This setup node can be
used to set up the memory configuration, accessible NICs, and other EAL-related used to set up the memory configuration, accessible NICs, and other EAL-related
parameters, among other things. The definition of lcore affinity as an EAL parameters, among other things. The node `dpdk.eal-params` also supports
multiple arguments of the same type. This can be useful for EAL arguments
such as `--vdev`, `--allow`, or `--block`. Values for these EAL arguments
are specified as a comma-separated list.
An example of such usage can be found in the example above where the `allow`
argument only makes `0000:3b:00.0` and `0000:3b:00.1` accessible to Suricata.
arguments with list node. such as --vdev, --allow, --block eal options.
The definition of lcore affinity as an EAL
parameter is a standard practice. However, lcore parameters like `-l`, `-c`, parameter is a standard practice. However, lcore parameters like `-l`, `-c`,
and `--lcores`` are specified within the `suricata-yaml-threading`_ section and `--lcores`` are specified within the `suricata-yaml-threading`_ section
to prevent configuration overlap. to prevent configuration overlap.

@ -272,6 +272,14 @@ static void InitEal(void)
ArgumentsAdd(&args, AllocAndSetArgument("suricata")); ArgumentsAdd(&args, AllocAndSetArgument("suricata"));
TAILQ_FOREACH (param, &eal_params->head, next) { TAILQ_FOREACH (param, &eal_params->head, next) {
if (ConfNodeIsSequence(param)) {
const char *key = param->name;
ConfNode *val;
TAILQ_FOREACH (val, &param->head, next) {
ArgumentsAddOptionAndArgument(&args, key, (const char *)val->val);
}
continue;
}
ArgumentsAddOptionAndArgument(&args, param->name, param->val); ArgumentsAddOptionAndArgument(&args, param->name, param->val);
} }

Loading…
Cancel
Save