We currently pass the same parameters to all handlers even if they are
specific to a particular handler. Pass them via the opaque node_data
instead, in preparation for adding yet another handler specific
parameter.

Signed-off-by: Felix Moebius <[email protected]>
---
v3:
- Split refactor into separate commit for v3
---
 controller/mac-cache.c | 29 +++++++++++------------------
 controller/mac-cache.h | 23 +++++++++++------------
 controller/statctrl.c  | 21 +++++++++++----------
 3 files changed, 33 insertions(+), 40 deletions(-)

diff --git a/controller/mac-cache.c b/controller/mac-cache.c
index 4f859b7ea..a03581b3f 100644
--- a/controller/mac-cache.c
+++ b/controller/mac-cache.c
@@ -399,10 +399,8 @@ mac_binding_update_log(const char *action,
 }
 
 void
-mac_binding_stats_run(
-        struct rconn *swconn OVS_UNUSED,
-        struct ovsdb_idl_index *sbrec_port_binding_by_name OVS_UNUSED,
-        struct vector *stats_vec, uint64_t *req_delay, void *data)
+mac_binding_stats_run(struct vector *stats_vec, uint64_t *req_delay,
+                      void *data)
 {
     struct mac_cache_data *cache_data = data;
     long long timewall_now = time_wall_msec();
@@ -445,7 +443,7 @@ mac_binding_stats_run(
 
     mac_cache_update_req_delay(&cache_data->thresholds, req_delay);
     if (*req_delay) {
-        VLOG_DBG("MAC binding statistics dalay: %"PRIu64, *req_delay);
+        VLOG_DBG("MAC binding statistics delay: %"PRIu64, *req_delay);
     }
 }
 
@@ -498,10 +496,7 @@ fdb_update_log(const char *action,
 }
 
 void
-fdb_stats_run(struct rconn *swconn OVS_UNUSED,
-              struct ovsdb_idl_index *sbrec_port_binding_by_name OVS_UNUSED,
-              struct vector *stats_vec,
-              uint64_t *req_delay, void *data)
+fdb_stats_run(struct vector *stats_vec, uint64_t *req_delay, void *data)
 {
     struct mac_cache_data *cache_data = data;
     long long timewall_now = time_wall_msec();
@@ -543,7 +538,7 @@ fdb_stats_run(struct rconn *swconn OVS_UNUSED,
 
     mac_cache_update_req_delay(&cache_data->thresholds, req_delay);
     if (*req_delay) {
-        VLOG_DBG("FDB entry statistics dalay: %"PRIu64, *req_delay);
+        VLOG_DBG("FDB entry statistics delay: %"PRIu64, *req_delay);
     }
 }
 
@@ -868,14 +863,12 @@ mac_binding_probe_stats_process_flow_stats(
 }
 
 void
-mac_binding_probe_stats_run(
-        struct rconn *swconn,
-        struct ovsdb_idl_index *sbrec_port_binding_by_name,
-        struct vector *stats_vec,
-        uint64_t *req_delay, void *data)
+mac_binding_probe_stats_run(struct vector *stats_vec, uint64_t *req_delay,
+                            void *data)
 {
     long long timewall_now = time_wall_msec();
-    struct mac_cache_data *cache_data = data;
+    struct mac_binding_probe_data *probe_data = data;
+    struct mac_cache_data *cache_data = probe_data->cache_data;
 
     struct mac_cache_stats *stats;
     VECTOR_FOR_EACH_PTR (stats_vec, stats) {
@@ -908,7 +901,7 @@ mac_binding_probe_stats_run(
         }
 
         const struct sbrec_port_binding *pb =
-            lport_lookup_by_name(sbrec_port_binding_by_name,
+            lport_lookup_by_name(probe_data->sbrec_port_binding_by_name,
                                  sbrec->logical_port);
         if (!pb) {
             continue;
@@ -930,7 +923,7 @@ mac_binding_probe_stats_run(
                                    &mb->data, true, threshold,
                                    stats->idle_age_ms, since_updated_ms);
 
-            send_self_originated_neigh_packet(swconn,
+            send_self_originated_neigh_packet(probe_data->swconn,
                                               sbrec->datapath->tunnel_key,
                                               pb->tunnel_key, laddr.ea,
                                               &local, &mb->data.ip,
diff --git a/controller/mac-cache.h b/controller/mac-cache.h
index d7b5b9cd5..e75c49820 100644
--- a/controller/mac-cache.h
+++ b/controller/mac-cache.h
@@ -63,6 +63,12 @@ struct mac_binding_data {
     struct eth_addr mac;
 };
 
+struct mac_binding_probe_data {
+    struct mac_cache_data *cache_data;
+    struct rconn *swconn;
+    struct ovsdb_idl_index *sbrec_port_binding_by_name;
+};
+
 struct mac_binding {
     struct hmap_node hmap_node;
     /* Common data to identify MAC binding. */
@@ -191,19 +197,14 @@ void
 mac_binding_stats_process_flow_stats(struct vector *stats_vec,
                                      struct ofputil_flow_stats *ofp_stats);
 
-void mac_binding_stats_run(
-        struct rconn *swconn OVS_UNUSED,
-        struct ovsdb_idl_index *sbrec_port_binding_by_name OVS_UNUSED,
-        struct vector *stats_vec, uint64_t *req_delay, void *data);
+void mac_binding_stats_run(struct vector *stats_vec, uint64_t *req_delay,
+                           void *data);
 
 /* FDB stat processing. */
 void fdb_stats_process_flow_stats(struct vector *stats_vec,
                                   struct ofputil_flow_stats *ofp_stats);
 
-void fdb_stats_run(
-        struct rconn *swconn OVS_UNUSED,
-        struct ovsdb_idl_index *sbrec_port_binding_by_name OVS_UNUSED,
-        struct vector *stats_vec, uint64_t *req_delay, void *data);
+void fdb_stats_run(struct vector *stats_vec, uint64_t *req_delay, void *data);
 
 /* Packet buffering. */
 void bp_packet_data_destroy(struct bp_packet_data *pd);
@@ -235,9 +236,7 @@ void mac_binding_probe_stats_process_flow_stats(
         struct vector *stats_vec,
         struct ofputil_flow_stats *ofp_stats);
 
-void mac_binding_probe_stats_run(
-        struct rconn *swconn,
-        struct ovsdb_idl_index *sbrec_port_binding_by_name,
-        struct vector *stats_vec, uint64_t *req_delay, void *data);
+void mac_binding_probe_stats_run(struct vector *stats_vec, uint64_t *req_delay,
+                                 void *data);
 
 #endif /* controller/mac-cache.h */
diff --git a/controller/statctrl.c b/controller/statctrl.c
index a76bac056..3ad135120 100644
--- a/controller/statctrl.c
+++ b/controller/statctrl.c
@@ -64,10 +64,7 @@ struct stats_node {
                                struct ofputil_flow_stats *ofp_stats);
     /* Function to process the parsed stats.
      * This function runs in main thread locked behind mutex. */
-    void (*run)(struct rconn *swconn,
-                struct ovsdb_idl_index *sbrec_port_binding_by_name,
-                struct vector *stats,
-                uint64_t *req_delay, void *data);
+    void (*run)(struct vector *stats, uint64_t *req_delay, void *data);
     /* Name of the stats node. */
     const char *name;
 };
@@ -181,10 +178,16 @@ statctrl_run(struct ovsdb_idl_txn *ovnsb_idl_txn,
         return;
     }
 
+    struct mac_binding_probe_data mac_binding_probe_data = {
+        .cache_data = mac_cache_data,
+        .sbrec_port_binding_by_name = sbrec_port_binding_by_name,
+        .swconn = statctrl_ctx.swconn,
+    };
+
     void *node_data[STATS_MAX] = {
-        mac_cache_data,
-        mac_cache_data,
-        mac_cache_data
+        [STATS_MAC_BINDING] = mac_cache_data,
+        [STATS_FDB] = mac_cache_data,
+        [STATS_MAC_BINDING_PROBE] = &mac_binding_probe_data,
     };
 
     bool schedule_updated = false;
@@ -197,9 +200,7 @@ statctrl_run(struct ovsdb_idl_txn *ovnsb_idl_txn,
         uint64_t prev_delay = node->request_delay;
 
         stopwatch_start(node->name, time_msec());
-        node->run(statctrl_ctx.swconn,
-                  sbrec_port_binding_by_name, &node->stats,
-                  &node->request_delay, node_data[i]);
+        node->run(&node->stats, &node->request_delay, node_data[i]);
         vector_clear(&node->stats);
         if (vector_capacity(&node->stats) >= STATS_VEC_CAPACITY_THRESHOLD) {
             VLOG_DBG("The statistics vector for node '%s' capacity "
-- 
2.52.0


   
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to