[ovs-dev] [PATCH 12/62] netdev-offload: work around for vhostuserclient type flow_api
Tao YunXiang
taoyunxiang at cmss.chinamobile.com
Mon Dec 28 09:24:30 UTC 2020
From: Liuchang <liuchang at cmss.chinamobile.com>
Code Source From: Self Code
Description:
For vhu type, no intel dpdk driver cannot support coresponding
offload api, so for debug reason, we add work around code for vhost
user type
Jira: #[Optional]
市场项目编号(名称):[Optional]
---
lib/netdev-offload-dpdk.c | 2 +-
lib/netdev-offload-provider.h | 5 +++++
lib/netdev-offload.c | 15 +++++++++++----
3 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 23527bd..befc1d6 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -1368,7 +1368,7 @@ netdev_offload_dpdk_destroy_flow(struct netdev *netdev,
return ret;
}
-static int
+int
netdev_offload_dpdk_flow_put(struct netdev *netdev, struct match *match,
struct nlattr *actions, size_t actions_len,
const ovs_u128 *ufid, struct offload_info *info,
diff --git a/lib/netdev-offload-provider.h b/lib/netdev-offload-provider.h
index 5a809c0..0c1a370 100644
--- a/lib/netdev-offload-provider.h
+++ b/lib/netdev-offload-provider.h
@@ -28,6 +28,11 @@
extern "C" {
#endif
+extern int
+netdev_offload_dpdk_flow_put(struct netdev *netdev, struct match *match,
+ struct nlattr *actions, size_t actions_len,
+ const ovs_u128 *ufid, struct offload_info *info,
+ struct dpif_flow_stats *stats);
struct netdev_flow_api {
char *type;
/* Flush all offloaded flows from a netdev.
diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c
index 1612fe6..a32b3fc 100644
--- a/lib/netdev-offload.c
+++ b/lib/netdev-offload.c
@@ -237,6 +237,7 @@ netdev_flow_dump_next(struct netdev_flow_dump *dump, struct match *match,
: false;
}
+
int
netdev_flow_put(struct netdev *netdev, struct match *match,
struct nlattr *actions, size_t act_len,
@@ -245,11 +246,17 @@ netdev_flow_put(struct netdev *netdev, struct match *match,
{
const struct netdev_flow_api *flow_api =
ovsrcu_get(const struct netdev_flow_api *, &netdev->flow_api);
+ const char *netdev_type = netdev->netdev_class->type;
- return (flow_api && flow_api->flow_put)
- ? flow_api->flow_put(netdev, match, actions, act_len, ufid,
- info, stats)
- : EOPNOTSUPP;
+ if (!strcmp(netdev_type, "dpdkvhostuserclient")) {
+ return netdev_offload_dpdk_flow_put(netdev, match, actions, act_len, ufid,
+ info, stats);
+ } else {
+ return (flow_api && flow_api->flow_put)
+ ? flow_api->flow_put(netdev, match, actions, act_len, ufid,
+ info, stats)
+ : EOPNOTSUPP;
+ }
}
int
--
1.8.3.1
More information about the dev
mailing list