>-----Original Message-----
>From: dev <[email protected]> On Behalf Of Eelco Chaudron
>Sent: Tuesday, 2 December 2025 16:05
>To: [email protected]
>Subject: [ovs-dev] [PATCH v2 02/41] dpif-offload: Add provider for tc offload.
>
>This patch adds the tc provider framework.
>
>Signed-off-by: Eelco Chaudron <[email protected]>
>---
> lib/automake.mk                  |  1 +
> lib/dpif-offload-provider.h      |  3 +-
> lib/dpif-offload-tc.c            | 47 ++++++++++++++++++++++++++++++++
> lib/dpif-offload.c               |  3 ++
> tests/system-offloads-traffic.at | 20 ++++++++++++++
> 5 files changed, 73 insertions(+), 1 deletion(-)  create mode 100644 lib/dpif-
>offload-tc.c
>
>diff --git a/lib/automake.mk b/lib/automake.mk index 314102ecc..6e015ebfc
>100644
>--- a/lib/automake.mk
>+++ b/lib/automake.mk
>@@ -475,6 +475,7 @@ lib_libopenvswitch_la_SOURCES += \
>       lib/dpif-netlink.h \
>       lib/dpif-netlink-rtnl.c \
>       lib/dpif-netlink-rtnl.h \
>+      lib/dpif-offload-tc.c \
>       lib/if-notifier.c \
>       lib/netdev-linux.c \
>       lib/netdev-linux.h \
>diff --git a/lib/dpif-offload-provider.h b/lib/dpif-offload-provider.h index
>77f89b0c3..4cd6fb88a 100644
>--- a/lib/dpif-offload-provider.h
>+++ b/lib/dpif-offload-provider.h
>@@ -17,6 +17,7 @@
> #ifndef DPIF_OFFLOAD_PROVIDER_H
> #define DPIF_OFFLOAD_PROVIDER_H
>
>+#include "dpif-provider.h"
> #include "ovs-thread.h"
> #include "openvswitch/list.h"
>
>@@ -88,7 +89,7 @@ struct dpif_offload_class {
>
> extern struct dpif_offload_class dpif_offload_dummy_class;  extern struct
>dpif_offload_class dpif_offload_dummy_x_class;
>-
Remove this line in the previous commit.
>+extern struct dpif_offload_class dpif_offload_tc_class;
>
> /* Global function, called by the dpif layer. */  void 
> dp_offload_initialize(void);
>diff --git a/lib/dpif-offload-tc.c b/lib/dpif-offload-tc.c new file mode 100644
>index 000000000..f5d62566e
>--- /dev/null
>+++ b/lib/dpif-offload-tc.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_tc_open(const struct dpif_offload_class *offload_class,
>+                     struct dpif *dpif, struct dpif_offload
>+**dpif_offload) {
>+    struct dpif_offload *offload = xmalloc(sizeof(struct
>+dpif_offload));
Sizeof *offload
>+
>+    dpif_offload_init(offload, offload_class, dpif);
>+    *dpif_offload = offload;
>+    return 0;
>+}
>+
>+static void
>+dpif_offload_tc_close(struct dpif_offload *dpif_offload) {
>+    free(dpif_offload);
>+}
>+
>+struct dpif_offload_class dpif_offload_tc_class = {
>+    .type = "tc",
>+    .supported_dpif_types = (const char *const[]) {
>+        "system",
>+        NULL},
>+    .open = dpif_offload_tc_open,
>+    .close = dpif_offload_tc_close,
>+};
>diff --git a/lib/dpif-offload.c b/lib/dpif-offload.c index e46b41163..00e039d7b
>100644
>--- a/lib/dpif-offload.c
>+++ b/lib/dpif-offload.c
>@@ -37,6 +37,9 @@ static struct shash dpif_offload_providers \
>     SHASH_INITIALIZER(&dpif_offload_providers);
>
> static const struct dpif_offload_class *base_dpif_offload_classes[] = {
>+#if defined(__linux__)
>+    &dpif_offload_tc_class,
>+#endif
>     &dpif_offload_dummy_class,
>     &dpif_offload_dummy_x_class,
> };
>diff --git a/tests/system-offloads-traffic.at 
>b/tests/system-offloads-traffic.at
>index f70d02926..88ee6238d 100644
>--- a/tests/system-offloads-traffic.at
>+++ b/tests/system-offloads-traffic.at
>@@ -1166,3 +1166,23 @@ OVS_WAIT_WHILE(
>
> OVS_TRAFFIC_VSWITCHD_STOP
> AT_CLEANUP
>+
>+AT_SETUP([offloads - ovs-appctl dpif/offload/show - offloads enabled])
>+AT_KEYWORDS([dpif-offload])
>+OVS_TRAFFIC_VSWITCHD_START([], [],
>+  [-- set Open_vSwitch . other_config:hw-offload=true])
>+
>+AT_CHECK([ovs-appctl dpif/offload/show], [0], [dnl
>+system@ovs-system:
>+  tc
>+])
>+
>+AT_CHECK([ovs-appctl --format json --pretty dpif/offload/show], [0],
>+[dnl {
>+  "system@ovs-system": {
>+    "providers": [[
>+      "tc"]]}}
>+])
>+
>+OVS_TRAFFIC_VSWITCHD_STOP
>+AT_CLEANUP
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to