[PATCH v1 8/9] net/i40e: disable tunnel replacement in multi-driver mode

Anatoly Burakov anatoly.burakov at intel.com
Fri Oct 30 10:40:21 CET 2026


Cloud filter replacement is not supported in multi-driver mode, so
tunnel flows that need it (MPLS, GTP, QinQ, L4 port) always failed to
install. The failure also marked the tunnel state as needing a device
reset, which blocked all other tunnel flows.

Do not initialize the engines for these tunnel types in multi-driver
mode.

Fixes: 28a3d1c89167 ("net/i40e: reimplement tunnel parsers")

Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
 drivers/net/intel/i40e/i40e_flow_tunnel.c | 34 ++++++++++++++++++++---
 1 file changed, 30 insertions(+), 4 deletions(-)

diff --git a/drivers/net/intel/i40e/i40e_flow_tunnel.c b/drivers/net/intel/i40e/i40e_flow_tunnel.c
index 237678ab8c2..d74f46705f7 100644
--- a/drivers/net/intel/i40e/i40e_flow_tunnel.c
+++ b/drivers/net/intel/i40e/i40e_flow_tunnel.c
@@ -1883,6 +1883,20 @@ i40e_tunnel_flow_engine_init(const struct ci_flow_engine *engine __rte_unused,
 	return tunnel_priv->state == NULL ? -ENOMEM : 0;
 }
 
+static int
+i40e_tunnel_replace_flow_engine_init(const struct ci_flow_engine *engine,
+		struct rte_eth_dev_data *dev_data,
+		void *priv)
+{
+	struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev_data->dev_private);
+
+	/* tunnel filter replacement is not supported in multi-driver mode */
+	if (pf->support_multi_driver)
+		return -ENOTSUP;
+
+	return i40e_tunnel_flow_engine_init(engine, dev_data, priv);
+}
+
 static void
 i40e_tunnel_flow_engine_uninit(const struct ci_flow_engine *engine __rte_unused,
 		void *priv)
@@ -1903,6 +1917,18 @@ static const struct ci_flow_engine_ops i40e_flow_engine_tunnel_ops = {
 	.flow_uninstall = i40e_tunnel_flow_uninstall,
 };
 
+/* for tunnel types that require tunnel filter replacement */
+static const struct ci_flow_engine_ops i40e_flow_engine_tunnel_replace_ops = {
+	.engine_init = i40e_tunnel_replace_flow_engine_init,
+	.engine_uninit = i40e_tunnel_flow_engine_uninit,
+	.ctx_init = i40e_tunnel_ctx_init,
+	.ctx_to_flow = i40e_tunnel_ctx_to_flow,
+	.flow_register = i40e_tunnel_flow_register,
+	.flow_unregister = i40e_tunnel_flow_unregister,
+	.flow_install = i40e_tunnel_flow_install,
+	.flow_uninstall = i40e_tunnel_flow_uninstall,
+};
+
 const struct ci_flow_engine i40e_flow_engine_tunnel_nvgre = {
 	.name = "i40e_tunnel_nvgre",
 	.ops = &i40e_flow_engine_tunnel_ops,
@@ -1923,7 +1949,7 @@ const struct ci_flow_engine i40e_flow_engine_tunnel_vxlan = {
 
 const struct ci_flow_engine i40e_flow_engine_tunnel_mpls = {
 	.name = "i40e_tunnel_mpls",
-	.ops = &i40e_flow_engine_tunnel_ops,
+	.ops = &i40e_flow_engine_tunnel_replace_ops,
 	.ctx_size = sizeof(struct i40e_tunnel_ctx),
 	.flow_size = sizeof(struct i40e_tunnel_flow),
 	.priv_size = sizeof(struct i40e_tunnel_priv),
@@ -1932,7 +1958,7 @@ const struct ci_flow_engine i40e_flow_engine_tunnel_mpls = {
 
 const struct ci_flow_engine i40e_flow_engine_tunnel_gtp = {
 	.name = "i40e_tunnel_gtp",
-	.ops = &i40e_flow_engine_tunnel_ops,
+	.ops = &i40e_flow_engine_tunnel_replace_ops,
 	.ctx_size = sizeof(struct i40e_tunnel_ctx),
 	.flow_size = sizeof(struct i40e_tunnel_flow),
 	.priv_size = sizeof(struct i40e_tunnel_priv),
@@ -1941,7 +1967,7 @@ const struct ci_flow_engine i40e_flow_engine_tunnel_gtp = {
 
 const struct ci_flow_engine i40e_flow_engine_tunnel_l4 = {
 	.name = "i40e_tunnel_l4",
-	.ops = &i40e_flow_engine_tunnel_ops,
+	.ops = &i40e_flow_engine_tunnel_replace_ops,
 	.ctx_size = sizeof(struct i40e_tunnel_ctx),
 	.flow_size = sizeof(struct i40e_tunnel_flow),
 	.priv_size = sizeof(struct i40e_tunnel_priv),
@@ -1950,7 +1976,7 @@ const struct ci_flow_engine i40e_flow_engine_tunnel_l4 = {
 
 const struct ci_flow_engine i40e_flow_engine_tunnel_qinq = {
 	.name = "i40e_tunnel_qinq",
-	.ops = &i40e_flow_engine_tunnel_ops,
+	.ops = &i40e_flow_engine_tunnel_replace_ops,
 	.ctx_size = sizeof(struct i40e_tunnel_ctx),
 	.flow_size = sizeof(struct i40e_tunnel_flow),
 	.priv_size = sizeof(struct i40e_tunnel_priv),
-- 
2.52.0



More information about the dev mailing list