On 13 Jan 2026, at 14:02, Ilya Maximets wrote:
> 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.
ACK ;)
>> + .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