On 16/03/2026 16:54, Eelco Chaudron wrote:
External email: Use caution opening links or attachments
On 15 Mar 2026, at 16:26, Eli Britstein wrote:
On 12/03/2026 12:39, Eelco Chaudron wrote:
External email: Use caution opening links or attachments
On 9 Feb 2026, at 14:29, Eli Britstein wrote:
From: Ariel Levkovich <[email protected]>
Add a new option to build ovs with doca by specifying '--with-doca' in the
configure line.
This flag must be used along with '--with-dpdk'. Otherwise the configure step
will fail.
An example:
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc \
--with-dpdk=static --with-doca=static
Thanks for the patch, Ariel/Eli! Much appreciated.
I did not dive too deeply into the automake changes, and I would love for
someone with more experience in that area to take a look as well. That
said, I did notice quite a bit of unusual handling going on there. Is all
of that really necessary, or might there be a cleaner way to approach it?
Maybe there is even an opportunity to simplify things in the DOCA package
itself.
Ack. I simplified it, will be in v2.
Thanks :)
Co-authored-by: Salem Sol <[email protected]>
Signed-off-by: Salem Sol <[email protected]>
Co-authored-by: Eli Britstein <[email protected]>
Signed-off-by: Eli Britstein <[email protected]>
Signed-off-by: Ariel Levkovich <[email protected]>
---
acinclude.m4 | 248 ++++++++++++++++++++++++++++++++++
configure.ac | 1 +
lib/automake.mk | 4 +
lib/ovs-doca.c | 86 ++++++++++++
lib/ovs-doca.h | 31 +++++
utilities/checkpatch_dict.txt | 2 +
vswitchd/bridge.c | 5 +
vswitchd/ovs-vswitchd.c | 3 +
vswitchd/vswitch.ovsschema | 9 +-
vswitchd/vswitch.xml | 10 ++
10 files changed, 397 insertions(+), 2 deletions(-)
create mode 100644 lib/ovs-doca.c
create mode 100644 lib/ovs-doca.h
diff --git a/acinclude.m4 b/acinclude.m4
index 586163ef3..72411df48 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -367,6 +367,253 @@ AC_DEFUN([OVS_CHECK_LINUX_AF_XDP], [
AM_CONDITIONAL([HAVE_AF_XDP], test "$AF_XDP_ENABLE" = true)
])
+dnl OVS_CHECK_DOCA
+dnl
+dnl Configure DOCA source tree
Skipped reviewing this part.
[...]
diff --git a/lib/ovs-doca.c b/lib/ovs-doca.c
new file mode 100644
index 000000000..eae361a21
--- /dev/null
+++ b/lib/ovs-doca.c
@@ -0,0 +1,86 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
+ * All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <config.h>
+
+#include "compiler.h"
+#include "ovs-doca.h"
+#include "vswitch-idl.h"
+
+#ifdef DOCA_NETDEV
+
+#include <rte_common.h>
+#include <rte_pmd_mlx5.h>
+
+#include <doca_version.h>
+
+/* DOCA disables dpdk steering as a constructor in higher priority.
+ * Set a lower priority one to enable it back. Disable it only upon using
+ * doca ports.
+ */
+RTE_INIT(dpdk_steering_enable)
+{
+ rte_pmd_mlx5_enable_steering();
This sounds a bit scary to me.
Is there anything else DOCA changes in DPDK which is not visible to the
user? Especially since normal DPDK ports might be used, and when
compiled with DOCA it could behave differently than when compiled
without DOCA. The latter should ideally not be the case with DOCA
integration.
With doca compiled, dpdk steering (mlx5 only) is disabled in a constructor.
This constructor in OVS is for enabling it back.
Anything else DOCA configures in this constructor that is DPDK specific?
This is the whole constructor in doca:
>-------if
(rte_pmd_mlx5_driver_event_cb_register((rte_pmd_mlx5_driver_event_callback_t)_dpdk_queue_cb,
nullptr) != 0) {
>------->-------fprintf(stderr, "Failed to register DPDK queue
callback\n");
>-------}
>-------rte_pmd_mlx5_disable_steering();
There is a limitation that doca/mlx5-dpdk ports cannot be concurrently used. In
the same ESW it doesn't make any sense, so the only use-case in which this
limitation takes place is if the user wants to use mixed configuration of one
ESW with doca and another with dpdk (again, mlx5 only) ports.
It makes sense that a single ESW must be under one netdev's (DPDK or
DOCA) control. But if we have one ESW in DPDK and one in DOCA, we might
have a problem, right?
Right. this is what I said.
We think that this is an acceptable limitation.
I guess this limitation should be mentioned in the doca.rst doc, i.e.,
either all MLX ports must be controlled by DOCA or DPDK, not mixed.
Ack
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev