@@ -42,7 +42,8 @@ lflow_get_input_data(struct engine_node *node,
struct lflow_input *lflow_input)
{
struct northd_data *northd_data = engine_get_input_data("northd", node);
- struct bfd_data *bfd_data = engine_get_input_data("bfd_sync", node);
+ struct bfd_sync_data *bfd_sync_data =
+ engine_get_input_data("bfd_sync", node);
struct static_routes_data *static_routes_data =
engine_get_input_data("static_routes", node);
struct route_policies_data *route_policies_data =
@@ -82,7 +83,7 @@ lflow_get_input_data(struct engine_node *node,
lflow_input->meter_groups = &sync_meters_data->meter_groups;
lflow_input->lb_datapaths_map = &northd_data->lb_datapaths_map;
lflow_input->svc_monitor_map = &northd_data->svc_monitor_map;
- lflow_input->bfd_connections = &bfd_data->bfd_connections;
+ lflow_input->bfd_connections = &bfd_sync_data->bfd_connections;
lflow_input->parsed_routes = &static_routes_data->parsed_routes;
lflow_input->route_tables = &static_routes_data->route_tables;
lflow_input->route_policies = &route_policies_data->route_policies;
@@ -392,15 +392,16 @@ en_bfd_sync_run(struct engine_node *node, void *data)
= engine_get_input_data("static_routes", node);
const struct nbrec_bfd_table *nbrec_bfd_table =
EN_OVSDB_GET(engine_get_input("NB_bfd", node));
- struct bfd_data *bfd_sync_data = data;
+ struct bfd_sync_data *bfd_sync_data = data;
- bfd_destroy(data);
- bfd_init(data);
+ bfd_sync_destroy(data);
+ bfd_sync_init(data);
bfd_table_sync(eng_ctx->ovnsb_idl_txn, nbrec_bfd_table,
&northd_data->lr_ports, &bfd_data->bfd_connections,
&route_policies_data->bfd_active_connections,
&static_routes_data->bfd_active_connections,
- &bfd_sync_data->bfd_connections);
+ &bfd_sync_data->bfd_connections,
+ &bfd_sync_data->bfd_ports);
engine_set_node_state(node, EN_UPDATED);
}
@@ -468,8 +469,8 @@ void
*en_bfd_sync_init(struct engine_node *node OVS_UNUSED,
struct engine_arg *arg OVS_UNUSED)
{
- struct bfd_data *data = xzalloc(sizeof *data);
- bfd_init(data);
+ struct bfd_sync_data *data = xzalloc(sizeof *data);
+ bfd_sync_init(data);
return data;
}
@@ -553,7 +554,7 @@ en_bfd_cleanup(void *data)
void
en_bfd_sync_cleanup(void *data)
{
- bfd_destroy(data);
+ bfd_sync_destroy(data);
}
void
@@ -10541,7 +10541,8 @@ bfd_table_sync(struct ovsdb_idl_txn *ovnsb_txn,
const struct hmap *bfd_connections,
const struct hmap *rp_bfd_connections,
const struct hmap *sr_bfd_connections,
- struct hmap *sync_bfd_connections)
+ struct hmap *sync_bfd_connections,
+ struct sset *bfd_ports)
{
if (!ovnsb_txn) {
return;
@@ -10624,6 +10625,7 @@ bfd_table_sync(struct ovsdb_idl_txn *ovnsb_txn,
}
}
+ sset_add(bfd_ports, nb_bt->logical_port);
bfd_e->stale = false;
}
@@ -18796,6 +18798,13 @@ bfd_init(struct bfd_data *data)
hmap_init(&data->bfd_connections);
}
+void
+bfd_sync_init(struct bfd_sync_data *data)
+{
+ hmap_init(&data->bfd_connections);
+ sset_init(&data->bfd_ports);
+}
+
void
ecmp_nexthop_init(struct ecmp_nexthop_data *data)
{
@@ -18858,6 +18867,13 @@ bfd_destroy(struct bfd_data *data)
__bfd_destroy(&data->bfd_connections);
}
+void
+bfd_sync_destroy(struct bfd_sync_data *data)
+{
+ __bfd_destroy(&data->bfd_connections);
+ sset_destroy(&data->bfd_ports);
+}
+
void
route_policies_destroy(struct route_policies_data *data)
{
@@ -195,6 +195,11 @@ struct bfd_data {
struct hmap bfd_connections;
};
+struct bfd_sync_data {
+ struct hmap bfd_connections;
+ struct sset bfd_ports;
+};
+
struct ecmp_nexthop_data {
struct simap nexthops;
};
@@ -743,6 +748,9 @@ void static_routes_destroy(struct static_routes_data *);
void bfd_init(struct bfd_data *);
void bfd_destroy(struct bfd_data *);
+void bfd_sync_init(struct bfd_sync_data *);
+void bfd_sync_destroy(struct bfd_sync_data *);
+
void build_ecmp_nexthop_table(struct ovsdb_idl_txn *,
struct hmap *, struct simap *,
const struct sbrec_ecmp_nexthop_table *);
@@ -790,7 +798,8 @@ void build_route_policies(struct ovn_datapath *, const struct hmap *,
const struct hmap *, struct hmap *, struct hmap *);
void bfd_table_sync(struct ovsdb_idl_txn *, const struct nbrec_bfd_table *,
const struct hmap *, const struct hmap *,
- const struct hmap *, const struct hmap *, struct hmap *);
+ const struct hmap *, const struct hmap *, struct hmap *,
+ struct sset *);
void build_bfd_map(const struct nbrec_bfd_table *,
const struct sbrec_bfd_table *, struct hmap *);
void run_update_worker_pool(int n_threads);
Introduce bfd_sync_data as private structure for en_bfd_sync node. Introduce bfd_sync_init and bfd_sync_destroy utility routines Build bfd_port sset in bfd_table_sync(). Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> --- northd/en-lflow.c | 5 +++-- northd/en-northd.c | 15 ++++++++------- northd/northd.c | 18 +++++++++++++++++- northd/northd.h | 11 ++++++++++- 4 files changed, 38 insertions(+), 11 deletions(-)