On Mon, Mar 9, 2026 at 11:16 AM Felix Moebius via dev <
[email protected]> wrote:

> 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
>
>
Thank you Felix,

I applied this to main and backported all the way down to 24.03.

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

Reply via email to