[ovs-dev] [PATCH V3 09/19] netdev-offload-dpdk: Implement flow get method
Eli Britstein
elibr at mellanox.com
Sun Dec 8 13:22:54 UTC 2019
Implement the flow get method for DPDK, to get the statistics of the
provided ufid, towards reading statistics of fully offloaded flows.
Signed-off-by: Eli Britstein <elibr at mellanox.com>
Reviewed-by: Oz Shlomo <ozsh at mellanox.com>
---
lib/netdev-offload-dpdk.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 5568400b6..10ab9240a 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -705,9 +705,49 @@ netdev_offload_dpdk_init_flow_api(struct netdev *netdev)
return netdev_dpdk_flow_api_supported(netdev) ? 0 : EOPNOTSUPP;
}
+static int
+netdev_offload_dpdk_flow_get(struct netdev *netdev,
+ struct match *match OVS_UNUSED,
+ struct nlattr **actions OVS_UNUSED,
+ const ovs_u128 *ufid,
+ struct dpif_flow_stats *stats,
+ struct dpif_flow_attrs *attrs OVS_UNUSED,
+ struct ofpbuf *buf OVS_UNUSED)
+{
+ struct rte_flow_query_count query = { .reset = 1 };
+ struct rte_flow_error error;
+ struct rte_flow *rte_flow;
+ int ret = 0;
+
+ ovs_mutex_lock(&ufid_map_mutex);
+ rte_flow = ufid_to_rte_flow_find(ufid);
+ if (!rte_flow) {
+ ret = -1;
+ goto out;
+ }
+
+ memset(stats, 0, sizeof *stats);
+ ret = netdev_dpdk_rte_flow_query(netdev, rte_flow, &query, &error);
+ if (ret) {
+ VLOG_DBG_RL(&error_rl,
+ "%s: Failed to query ufid "UUID_FMT" flow: %p\n",
+ netdev_get_name(netdev), UUID_ARGS((struct uuid *)ufid),
+ rte_flow);
+ ret = -1;
+ goto out;
+ }
+ stats->n_packets += (query.hits_set) ? query.hits : 0;
+ stats->n_bytes += (query.bytes_set) ? query.bytes : 0;
+
+out:
+ ovs_mutex_unlock(&ufid_map_mutex);
+ return ret;
+}
+
const struct netdev_flow_api netdev_offload_dpdk = {
.type = "dpdk_flow_api",
.flow_put = netdev_offload_dpdk_flow_put,
.flow_del = netdev_offload_dpdk_flow_del,
.init_flow_api = netdev_offload_dpdk_init_flow_api,
+ .flow_get = netdev_offload_dpdk_flow_get,
};
--
2.14.5
More information about the dev
mailing list