[ovs-dev] [PATCH V3 08/14] netdev-offload: Disallow offloading to unrelated tunneling vports.
Eli Britstein
elibr at nvidia.com
Tue Mar 2 11:25:30 UTC 2021
From: Ilya Maximets <i.maximets at ovn.org>
'linux_tc' flow API suitable only for tunneling vports with backing
linux interfaces. DPDK flow API is not suitable for such ports.
With this change we could drop vport restriction from dpif-netdev.
This is a prerequisite for enabling vport offloading in DPDK.
Signed-off-by: Ilya Maximets <i.maximets at ovn.org>
Signed-off-by: Eli Britstein <elibr at nvidia.com>
Reviewed-by: Gaetan Rivet <gaetanr at nvidia.com>
---
lib/dpif-netdev.c | 3 +--
lib/netdev-offload-dpdk.c | 8 ++++++++
lib/netdev-offload-tc.c | 8 ++++++++
3 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 3b67761cd..58cad7ded 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -2697,8 +2697,7 @@ dp_netdev_flow_offload_put(struct dp_flow_offload_item *offload)
info.flow_mark = mark;
port = netdev_ports_get(in_port, dpif_type_str);
- if (!port || netdev_vport_is_vport_class(port->netdev_class)) {
- netdev_close(port);
+ if (!port) {
goto err_free;
}
/* Taking a global 'port_mutex' to fulfill thread safety restrictions for
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 356a77188..2b1abce36 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -24,6 +24,7 @@
#include "dpif-netdev.h"
#include "netdev-offload-provider.h"
#include "netdev-provider.h"
+#include "netdev-vport.h"
#include "openvswitch/match.h"
#include "openvswitch/vlog.h"
#include "packets.h"
@@ -1523,6 +1524,13 @@ netdev_offload_dpdk_flow_del(struct netdev *netdev OVS_UNUSED,
static int
netdev_offload_dpdk_init_flow_api(struct netdev *netdev)
{
+ if (netdev_vport_is_vport_class(netdev->netdev_class)
+ && !strcmp(netdev_get_dpif_type(netdev), "system")) {
+ VLOG_DBG("%s: vport belongs to the system datapath. Skipping.",
+ netdev_get_name(netdev));
+ return EOPNOTSUPP;
+ }
+
return netdev_dpdk_flow_api_supported(netdev) ? 0 : EOPNOTSUPP;
}
diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c
index 04b5e218a..3abb47faa 100644
--- a/lib/netdev-offload-tc.c
+++ b/lib/netdev-offload-tc.c
@@ -31,6 +31,7 @@
#include "netdev-linux.h"
#include "netdev-offload-provider.h"
#include "netdev-provider.h"
+#include "netdev-vport.h"
#include "netlink.h"
#include "netlink-socket.h"
#include "odp-netlink.h"
@@ -2073,6 +2074,13 @@ netdev_tc_init_flow_api(struct netdev *netdev)
int ifindex;
int error;
+ if (netdev_vport_is_vport_class(netdev->netdev_class)
+ && strcmp(netdev_get_dpif_type(netdev), "system")) {
+ VLOG_DBG("%s: vport doesn't belong to the system datapath. Skipping.",
+ netdev_get_name(netdev));
+ return EOPNOTSUPP;
+ }
+
ifindex = netdev_get_ifindex(netdev);
if (ifindex < 0) {
VLOG_INFO("init: failed to get ifindex for %s: %s",
--
2.28.0.2311.g225365fb51
More information about the dev
mailing list