]> git.droids-corp.org - dpdk.git/commitdiff
pipeline: fix packet mirroring configuration
authorCristian Dumitrescu <cristian.dumitrescu@intel.com>
Mon, 13 Jun 2022 17:28:34 +0000 (18:28 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 20 Jun 2022 14:04:13 +0000 (16:04 +0200)
Fix segmentation fault due to null pointer dereferencing inside the
"mirror" instruction when number of mirroring slots is set to 0. This
was taking place when the "mirror" instruction was used without the
mirror feature being properly configured, i.e. the API function
rte_swx_pipeline_mirroring_config was not called at initialization.

Fixes: dac0ecd9098 ("pipeline: support packet mirroring")
Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
lib/pipeline/rte_swx_pipeline.c
lib/pipeline/rte_swx_pipeline.h

index b4b44ad89794e3afeb69396c38b1d8f0ae91f9a6..5c3406f0cfee9a2afea5810876a8660144922ab6 100644 (file)
@@ -612,9 +612,6 @@ mirroring_build(struct rte_swx_pipeline *p)
 {
        uint32_t i;
 
-       if (!p->n_mirroring_slots || !p->n_mirroring_sessions)
-               return 0;
-
        for (i = 0; i < RTE_SWX_PIPELINE_THREADS_MAX; i++) {
                struct thread *t = &p->threads[i];
 
@@ -9772,6 +9769,8 @@ rte_swx_pipeline_config(struct rte_swx_pipeline **p, int numa_node)
        TAILQ_INIT(&pipeline->metarrays);
 
        pipeline->n_structs = 1; /* Struct 0 is reserved for action_data. */
+       pipeline->n_mirroring_slots = RTE_SWX_PACKET_MIRRORING_SLOTS_DEFAULT;
+       pipeline->n_mirroring_sessions = RTE_SWX_PACKET_MIRRORING_SESSIONS_DEFAULT;
        pipeline->numa_node = numa_node;
 
        status = port_in_types_register(pipeline);
index adc7fa53b7b66d489d454d54973cb3282721ce76..9299f27094b16cea83aeacea3ffb3d7522e0b52f 100644 (file)
@@ -163,6 +163,16 @@ rte_swx_pipeline_port_out_config(struct rte_swx_pipeline *p,
  * Packet mirroring
  */
 
+/** Default number of packet mirroring slots. */
+#ifndef RTE_SWX_PACKET_MIRRORING_SLOTS_DEFAULT
+#define RTE_SWX_PACKET_MIRRORING_SLOTS_DEFAULT 4
+#endif
+
+/** Default maximum number of packet mirroring sessions. */
+#ifndef RTE_SWX_PACKET_MIRRORING_SESSIONS_DEFAULT
+#define RTE_SWX_PACKET_MIRRORING_SESSIONS_DEFAULT 64
+#endif
+
 /** Packet mirroring parameters. */
 struct rte_swx_pipeline_mirroring_params {
        /** Number of packet mirroring slots. */