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
