From a748164d5863937580dde41785663b1d3f3b78b7 Mon Sep 17 00:00:00 2001 From: liaozhiyuan <798389647@qq.com> Date: Thu, 1 Jun 2023 10:38:04 +0800 Subject: [PATCH] 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 --- doc/userguide/configuration/suricata-yaml.rst | 10 +++++++++- src/runmode-dpdk.c | 8 ++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/userguide/configuration/suricata-yaml.rst b/doc/userguide/configuration/suricata-yaml.rst index 63ce9a8fca..fdb1aed3c4 100644 --- a/doc/userguide/configuration/suricata-yaml.rst +++ b/doc/userguide/configuration/suricata-yaml.rst @@ -1965,6 +1965,7 @@ The whole DPDK configuration resides in the `dpdk:` node. This node encapsulates dpdk: eal-params: proc-type: primary + allow: ["0000:3b:00.0", "0000:3b:00.1"] interfaces: - interface: 0000:3b:00.0 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. 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 -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`, and `--lcores`` are specified within the `suricata-yaml-threading`_ section to prevent configuration overlap. diff --git a/src/runmode-dpdk.c b/src/runmode-dpdk.c index 82e6aee57f..687d88871a 100644 --- a/src/runmode-dpdk.c +++ b/src/runmode-dpdk.c @@ -272,6 +272,14 @@ static void InitEal(void) ArgumentsAdd(&args, AllocAndSetArgument("suricata")); TAILQ_FOREACH (param, &eal_params->head, next) { + if (ConfNodeIsSequence(param)) { + const char *key = param->name; + ConfNode *val; + TAILQ_FOREACH (val, ¶m->head, next) { + ArgumentsAddOptionAndArgument(&args, key, (const char *)val->val); + } + continue; + } ArgumentsAddOptionAndArgument(&args, param->name, param->val); }