[ovs-dev] [PATCH 09/20] netdev: Add netdev function: flow_stats_get()

Eli Britstein elibr at mellanox.com
Wed Nov 20 15:28:15 UTC 2019


From: Ophir Munk <ophirmu at mellanox.com>

Add flow_stats_get() function to netdev offload class, as a pre-step
towards implementation of statistics quering fully offloaded flows.

Signed-off-by: Ophir Munk <ophirmu at mellanox.com>
Reviewed-by: Oz Shlomo <ozsh at mellanox.com>
Signed-off-by: Eli Britstein <elibr at mellanox.com>
---
 lib/netdev-offload-provider.h |  7 +++++++
 lib/netdev-offload.c          | 12 ++++++++++++
 lib/netdev-offload.h          |  2 ++
 3 files changed, 21 insertions(+)

diff --git a/lib/netdev-offload-provider.h b/lib/netdev-offload-provider.h
index 4e1c4251d..9d275e07a 100644
--- a/lib/netdev-offload-provider.h
+++ b/lib/netdev-offload-provider.h
@@ -82,6 +82,13 @@ struct netdev_flow_api {
     int (*flow_del)(struct netdev *, const ovs_u128 *ufid,
                     struct dpif_flow_stats *);
 
+    /* Get offloaded flow stats.
+     * Populate the 'stats' structure with the HW counters values for the
+     * specified ufid.
+     * Return 0 if successful, otherwise returns a positive errno value. */
+    int (*flow_stats_get)(struct netdev *netdev, const ovs_u128 *ufid,
+                          struct dpif_flow_stats *stats);
+
     /* Initializies the netdev flow api.
      * Return 0 if successful, otherwise returns a positive errno value. */
     int (*init_flow_api)(struct netdev *);
diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c
index ae01acda6..9726bb19a 100644
--- a/lib/netdev-offload.c
+++ b/lib/netdev-offload.c
@@ -267,6 +267,18 @@ netdev_flow_del(struct netdev *netdev, const ovs_u128 *ufid,
            : EOPNOTSUPP;
 }
 
+int
+netdev_flow_stats_get(struct netdev *netdev, const ovs_u128 *ufid,
+                      struct dpif_flow_stats *stats)
+{
+    const struct netdev_flow_api *flow_api =
+        ovsrcu_get(const struct netdev_flow_api *, &netdev->flow_api);
+
+    return (flow_api && flow_api->flow_stats_get
+            ? flow_api->flow_stats_get(netdev, ufid, stats)
+            : EOPNOTSUPP);
+}
+
 int
 netdev_init_flow_api(struct netdev *netdev)
 {
diff --git a/lib/netdev-offload.h b/lib/netdev-offload.h
index e27b8782e..78909a416 100644
--- a/lib/netdev-offload.h
+++ b/lib/netdev-offload.h
@@ -89,6 +89,8 @@ int netdev_flow_get(struct netdev *, struct match *, struct nlattr **actions,
                     struct dpif_flow_attrs *, struct ofpbuf *wbuffer);
 int netdev_flow_del(struct netdev *, const ovs_u128 *,
                     struct dpif_flow_stats *);
+int netdev_flow_stats_get(struct netdev *, const ovs_u128 *,
+                          struct dpif_flow_stats *);
 int netdev_init_flow_api(struct netdev *);
 void netdev_uninit_flow_api(struct netdev *);
 uint32_t netdev_get_block_id(struct netdev *);
-- 
2.14.5



More information about the dev mailing list