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;
-
+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));
+
+ 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
--
2.50.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev