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

Reply via email to