On 1/12/26 12:20 PM, Eelco Chaudron wrote:
> This patch adds the dpdk offload provider framework.
>
> Acked-by: Eli Britstein <elibr.nvidia.com>
> Signed-off-by: Eelco Chaudron <[email protected]>
> ---
>
> v3 changes:
> - Use the actual variable to determine the size for xmalloc().
> ---
> lib/automake.mk | 1 +
> lib/dpif-offload-dpdk.c | 47 +++++++++++++++++++++++++++++++++++++
> lib/dpif-offload-provider.h | 1 +
> lib/dpif-offload.c | 3 +++
> tests/system-dpdk.at | 23 ++++++++++++++++++
> 5 files changed, 75 insertions(+)
> create mode 100644 lib/dpif-offload-dpdk.c
>
> diff --git a/lib/automake.mk b/lib/automake.mk
> index 6e015ebfc..6db7daa9f 100644
> --- a/lib/automake.mk
> +++ b/lib/automake.mk
> @@ -507,6 +507,7 @@ endif
> if DPDK_NETDEV
> lib_libopenvswitch_la_SOURCES += \
> lib/dpdk.c \
> + lib/dpif-offload-dpdk.c \
> lib/netdev-dpdk.c \
> lib/netdev-offload-dpdk.c
> else
> diff --git a/lib/dpif-offload-dpdk.c b/lib/dpif-offload-dpdk.c
> new file mode 100644
> index 000000000..838a6839b
> --- /dev/null
> +++ b/lib/dpif-offload-dpdk.c
> @@ -0,0 +1,47 @@
> +/*
> + * Copyright (c) 2025 Red Hat, Inc.
> + *
> + * 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 "dpif-offload.h"
> +#include "dpif-offload-provider.h"
> +#include "util.h"
> +
> +static int
> +dpif_offload_dpdk_open(const struct dpif_offload_class *offload_class,
> + struct dpif *dpif, struct dpif_offload **offload_)
> +{
> + struct dpif_offload *offload = xmalloc(sizeof *offload);
> +
> + dpif_offload_init(offload, offload_class, dpif);
> + *offload_ = offload;
> + return 0;
> +}
> +
> +static void
> +dpif_offload_dpdk_close(struct dpif_offload *dpif_offload)
> +{
> + free(dpif_offload);
> +}
> +
> +struct dpif_offload_class dpif_offload_dpdk_class = {
> + .type = "dpdk",
> + .supported_dpif_types = (const char *const[]) {
> + "netdev",
> + NULL},
Same comment as for other providers.
> + .open = dpif_offload_dpdk_open,
> + .close = dpif_offload_dpdk_close,
> +};
> diff --git a/lib/dpif-offload-provider.h b/lib/dpif-offload-provider.h
> index 301329b69..a7869b587 100644
> --- a/lib/dpif-offload-provider.h
> +++ b/lib/dpif-offload-provider.h
> @@ -90,6 +90,7 @@ struct dpif_offload_class {
>
> extern struct dpif_offload_class dpif_offload_dummy_class;
> extern struct dpif_offload_class dpif_offload_dummy_x_class;
> +extern struct dpif_offload_class dpif_offload_dpdk_class;
> extern struct dpif_offload_class dpif_offload_tc_class;
>
>
> diff --git a/lib/dpif-offload.c b/lib/dpif-offload.c
> index 70748f789..80c8bf1f9 100644
> --- a/lib/dpif-offload.c
> +++ b/lib/dpif-offload.c
> @@ -39,6 +39,9 @@ static struct shash dpif_offload_providers \
> static const struct dpif_offload_class *base_dpif_offload_classes[] = {
> #if defined(__linux__)
> &dpif_offload_tc_class,
> +#endif
> +#ifdef DPDK_NETDEV
> + &dpif_offload_dpdk_class,
> #endif
> &dpif_offload_dummy_class,
> &dpif_offload_dummy_x_class,
> diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at
> index 393b76c76..e666a08c7 100644
> --- a/tests/system-dpdk.at
> +++ b/tests/system-dpdk.at
> @@ -941,3 +941,26 @@ AT_CHECK([ovs-vsctl del-port br10 p1], [], [stdout],
> [stderr])
> OVS_DPDK_STOP_VSWITCHD
> AT_CLEANUP
> dnl
> --------------------------------------------------------------------------
> +
> +dnl
> --------------------------------------------------------------------------
> +AT_SETUP([OVS-DPDK - ovs-appctl dpif/offload/show])
> +AT_KEYWORDS([dpdk dpif-offload])
> +OVS_DPDK_PRE_CHECK()
> +OVS_DPDK_START([--no-pci])
> +AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev])
> +
> +AT_CHECK([ovs-appctl dpif/offload/show], [0], [dnl
> +netdev@ovs-netdev:
> + dpdk
> +])
> +
> +AT_CHECK([ovs-appctl --format json --pretty dpif/offload/show], [0], [dnl
> +{
> + "netdev@ovs-netdev": {
> + "providers": [[
> + "dpdk"]]}}
> +])
> +
> +OVS_DPDK_STOP_VSWITCHD
> +AT_CLEANUP
> +dnl
> --------------------------------------------------------------------------
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev