Prior to this commit, when en-datapath-sync would run, it would combine all synced datapaths into a single large hmap. Type-specific synced datapath handlers would need to go through this hmap and filter out the relevant ones by type.
This commit alters things by making en-datapath-sync sort the synced datapaths into type-specific buckets. This then allows downstream engine nodes to only look at the synced datapaths corresponding to their type. Signed-off-by: Mark Michelson <[email protected]> --- northd/datapath-sync.h | 6 -- northd/en-datapath-logical-router.c | 23 ++--- northd/en-datapath-logical-switch.c | 23 ++--- northd/en-datapath-sync.c | 148 ++++++++++++++++++---------- northd/en-datapath-sync.h | 8 ++ 5 files changed, 118 insertions(+), 90 deletions(-) diff --git a/northd/datapath-sync.h b/northd/datapath-sync.h index f54b79fab..301b3388d 100644 --- a/northd/datapath-sync.h +++ b/northd/datapath-sync.h @@ -94,16 +94,10 @@ struct ovn_synced_datapath { struct ovn_synced_datapaths { struct hmap synced_dps; - struct hmap dp_tnlids; struct hmapx new; struct hmapx updated; struct hmapx deleted; - - /* Cache the vxlan mode setting. This is an easy way for us to detect if - * the global configuration resulted in a change to this value. - */ - bool vxlan_mode; }; struct ovn_unsynced_datapath *ovn_unsynced_datapath_alloc( diff --git a/northd/en-datapath-logical-router.c b/northd/en-datapath-logical-router.c index a4b5e2383..ae44ddaf5 100644 --- a/northd/en-datapath-logical-router.c +++ b/northd/en-datapath-logical-router.c @@ -24,6 +24,7 @@ #include "aging.h" #include "datapath-sync.h" #include "en-datapath-logical-router.h" +#include "en-datapath-sync.h" #include "ovn-util.h" VLOG_DEFINE_THIS_MODULE(en_datapath_logical_router); @@ -308,8 +309,9 @@ synced_logical_router_alloc(const struct ovn_synced_datapath *sdp) enum engine_node_state en_datapath_synced_logical_router_run(struct engine_node *node , void *data) { - const struct ovn_synced_datapaths *dps = + const struct all_synced_datapaths *all_dps = engine_get_input_data("datapath_sync", node); + const struct ovn_synced_datapaths *dps = &all_dps->synced_dps[DP_ROUTER]; struct ovn_synced_logical_router_map *router_map = data; synced_logical_router_map_destroy(router_map); @@ -317,9 +319,6 @@ en_datapath_synced_logical_router_run(struct engine_node *node , void *data) struct ovn_synced_datapath *sdp; HMAP_FOR_EACH (sdp, hmap_node, &dps->synced_dps) { - if (sdp->nb_row->table->class_ != &nbrec_table_logical_router) { - continue; - } struct ovn_synced_logical_router *lr = synced_logical_router_alloc(sdp); hmap_insert(&router_map->synced_routers, &lr->hmap_node, @@ -349,13 +348,12 @@ enum engine_input_handler_result en_datapath_synced_logical_router_datapath_sync_handler( struct engine_node *node, void *data) { - const struct ovn_synced_datapaths *dps = + const struct all_synced_datapaths *all_dps = engine_get_input_data("datapath_sync", node); + const struct ovn_synced_datapaths *dps = &all_dps->synced_dps[DP_ROUTER]; struct ovn_synced_logical_router_map *router_map = data; - if (hmapx_is_empty(&dps->deleted) && - hmapx_is_empty(&dps->new) && - hmapx_is_empty(&dps->updated)) { + if (!all_dps->has_tracked_data) { return EN_UNHANDLED; } @@ -364,9 +362,6 @@ en_datapath_synced_logical_router_datapath_sync_handler( struct ovn_synced_logical_router *lr; HMAPX_FOR_EACH (hmapx_node, &dps->new) { sdp = hmapx_node->data; - if (sdp->nb_row->table->class_ != &nbrec_table_logical_router) { - continue; - } lr = synced_logical_router_alloc(sdp); hmap_insert(&router_map->synced_routers, &lr->hmap_node, uuid_hash(&lr->nb->header_.uuid)); @@ -375,9 +370,6 @@ en_datapath_synced_logical_router_datapath_sync_handler( HMAPX_FOR_EACH (hmapx_node, &dps->deleted) { sdp = hmapx_node->data; - if (sdp->nb_row->table->class_ != &nbrec_table_logical_router) { - continue; - } lr = ovn_synced_logical_router_find(router_map, &sdp->nb_row->uuid); if (!lr) { return EN_UNHANDLED; @@ -388,9 +380,6 @@ en_datapath_synced_logical_router_datapath_sync_handler( HMAPX_FOR_EACH (hmapx_node, &dps->updated) { sdp = hmapx_node->data; - if (sdp->nb_row->table->class_ != &nbrec_table_logical_router) { - continue; - } lr = ovn_synced_logical_router_find(router_map, &sdp->nb_row->uuid); if (!lr) { return EN_UNHANDLED; diff --git a/northd/en-datapath-logical-switch.c b/northd/en-datapath-logical-switch.c index 71b16ffe0..0c8aaeba3 100644 --- a/northd/en-datapath-logical-switch.c +++ b/northd/en-datapath-logical-switch.c @@ -24,6 +24,7 @@ #include "ovn-nb-idl.h" #include "datapath-sync.h" #include "en-datapath-logical-switch.h" +#include "en-datapath-sync.h" #include "en-global-config.h" #include "ovn-util.h" @@ -299,8 +300,9 @@ synced_logical_switch_alloc(const struct ovn_synced_datapath *sdp) enum engine_node_state en_datapath_synced_logical_switch_run(struct engine_node *node , void *data) { - const struct ovn_synced_datapaths *dps = + const struct all_synced_datapaths *all_dps = engine_get_input_data("datapath_sync", node); + const struct ovn_synced_datapaths *dps = &all_dps->synced_dps[DP_SWITCH]; struct ovn_synced_logical_switch_map *switch_map = data; synced_logical_switch_map_destroy(switch_map); @@ -308,9 +310,6 @@ en_datapath_synced_logical_switch_run(struct engine_node *node , void *data) struct ovn_synced_datapath *sdp; HMAP_FOR_EACH (sdp, hmap_node, &dps->synced_dps) { - if (sdp->nb_row->table->class_ != &nbrec_table_logical_switch) { - continue; - } struct ovn_synced_logical_switch *lsw = synced_logical_switch_alloc(sdp); hmap_insert(&switch_map->synced_switches, &lsw->hmap_node, @@ -341,13 +340,12 @@ enum engine_input_handler_result en_datapath_synced_logical_switch_datapath_sync_handler( struct engine_node *node, void *data) { - const struct ovn_synced_datapaths *dps = + const struct all_synced_datapaths *all_dps = engine_get_input_data("datapath_sync", node); + const struct ovn_synced_datapaths *dps = &all_dps->synced_dps[DP_SWITCH]; struct ovn_synced_logical_switch_map *switch_map = data; - if (hmapx_is_empty(&dps->deleted) && - hmapx_is_empty(&dps->new) && - hmapx_is_empty(&dps->updated)) { + if (!all_dps->has_tracked_data) { return EN_UNHANDLED; } @@ -356,9 +354,6 @@ en_datapath_synced_logical_switch_datapath_sync_handler( struct ovn_synced_logical_switch *lsw; HMAPX_FOR_EACH (hmapx_node, &dps->new) { sdp = hmapx_node->data; - if (sdp->nb_row->table->class_ != &nbrec_table_logical_switch) { - continue; - } lsw = synced_logical_switch_alloc(sdp); hmap_insert(&switch_map->synced_switches, &lsw->hmap_node, uuid_hash(&lsw->nb->header_.uuid)); @@ -367,9 +362,6 @@ en_datapath_synced_logical_switch_datapath_sync_handler( HMAPX_FOR_EACH (hmapx_node, &dps->deleted) { sdp = hmapx_node->data; - if (sdp->nb_row->table->class_ != &nbrec_table_logical_switch) { - continue; - } lsw = ovn_synced_logical_switch_find(switch_map, &sdp->nb_row->uuid); if (!lsw) { return EN_UNHANDLED; @@ -380,9 +372,6 @@ en_datapath_synced_logical_switch_datapath_sync_handler( HMAPX_FOR_EACH (hmapx_node, &dps->updated) { sdp = hmapx_node->data; - if (sdp->nb_row->table->class_ != &nbrec_table_logical_switch) { - continue; - } lsw = ovn_synced_logical_switch_find(switch_map, &sdp->nb_row->uuid); if (!lsw) { return EN_UNHANDLED; diff --git a/northd/en-datapath-sync.c b/northd/en-datapath-sync.c index 40ff6b027..74a5c587c 100644 --- a/northd/en-datapath-sync.c +++ b/northd/en-datapath-sync.c @@ -31,17 +31,23 @@ void * en_datapath_sync_init(struct engine_node *node OVS_UNUSED, struct engine_arg *args OVS_UNUSED) { - struct ovn_synced_datapaths *synced_datapaths - = xmalloc(sizeof *synced_datapaths); - *synced_datapaths = (struct ovn_synced_datapaths) { - .synced_dps = HMAP_INITIALIZER(&synced_datapaths->synced_dps), - .dp_tnlids = HMAP_INITIALIZER(&synced_datapaths->dp_tnlids), - .new = HMAPX_INITIALIZER(&synced_datapaths->new), - .deleted = HMAPX_INITIALIZER(&synced_datapaths->deleted), - .updated = HMAPX_INITIALIZER(&synced_datapaths->updated), + struct all_synced_datapaths *all_dps; + all_dps = xmalloc(sizeof *all_dps); + *all_dps = (struct all_synced_datapaths) { + .dp_tnlids = HMAP_INITIALIZER(&all_dps->dp_tnlids), }; + for (enum ovn_datapath_type i = DP_MIN; i < DP_MAX; i++) { + struct ovn_synced_datapaths *sdps = &all_dps->synced_dps[i]; + *sdps = (struct ovn_synced_datapaths) { + .synced_dps = HMAP_INITIALIZER(&sdps->synced_dps), + .new = HMAPX_INITIALIZER(&sdps->new), + .deleted = HMAPX_INITIALIZER(&sdps->deleted), + .updated = HMAPX_INITIALIZER(&sdps->updated), + }; + } + - return synced_datapaths; + return all_dps; } static struct ovn_unsynced_datapath * @@ -120,6 +126,7 @@ struct candidate_sdp { struct ovn_synced_datapath *sdp; uint32_t requested_tunnel_key; uint32_t existing_tunnel_key; + enum ovn_datapath_type dp_type; bool tunnel_key_assigned; }; @@ -162,15 +169,19 @@ clear_tracked_data(struct ovn_synced_datapaths *synced_datapaths) } static void -reset_synced_datapaths(struct ovn_synced_datapaths *synced_datapaths) +reset_synced_datapaths(struct all_synced_datapaths *all_dps) { - struct ovn_synced_datapath *sdp; - HMAP_FOR_EACH_POP (sdp, hmap_node, &synced_datapaths->synced_dps) { - free(sdp); + for (enum ovn_datapath_type i = DP_MIN; i < DP_MAX; i++) { + struct ovn_synced_datapaths *synced_datapaths = + &all_dps->synced_dps[i]; + struct ovn_synced_datapath *sdp; + HMAP_FOR_EACH_POP (sdp, hmap_node, &synced_datapaths->synced_dps) { + free(sdp); + } + clear_tracked_data(synced_datapaths); } - ovn_destroy_tnlids(&synced_datapaths->dp_tnlids); - clear_tracked_data(synced_datapaths); - hmap_init(&synced_datapaths->dp_tnlids); + ovn_destroy_tnlids(&all_dps->dp_tnlids); + hmap_init(&all_dps->dp_tnlids); } static void @@ -200,10 +211,19 @@ create_synced_datapath_candidates_from_sb( continue; } + enum ovn_datapath_type dp_type = + ovn_datapath_type_from_string(datapath_get_nb_type(sb_dp)); + + if (dp_type >= DP_MAX) { + sbrec_datapath_binding_delete(sb_dp); + continue; + } + struct candidate_sdp candidate = { .sdp = synced_datapath_alloc(udp, sb_dp, false), .requested_tunnel_key = udp->requested_tunnel_key, .existing_tunnel_key = sb_dp->tunnel_key, + .dp_type = dp_type, }; synced_datapath_set_sb_fields(sb_dp, udp); vector_push(candidate_sdps, &candidate); @@ -231,6 +251,7 @@ create_synced_datapath_candidates_from_nb( .sdp = synced_datapath_alloc(udp, sb_dp, true), .requested_tunnel_key = udp->requested_tunnel_key, .existing_tunnel_key = sb_dp->tunnel_key, + .dp_type = i, }; synced_datapath_set_sb_fields(sb_dp, udp); vector_push(candidate_sdps, &candidate); @@ -240,14 +261,14 @@ create_synced_datapath_candidates_from_nb( static void assign_requested_tunnel_keys(struct vector *candidate_sdps, - struct ovn_synced_datapaths *synced_datapaths) + struct all_synced_datapaths *all_dps) { struct candidate_sdp *candidate; VECTOR_FOR_EACH_PTR (candidate_sdps, candidate) { if (!candidate->requested_tunnel_key) { continue; } - if (!ovn_add_tnlid(&synced_datapaths->dp_tnlids, + if (!ovn_add_tnlid(&all_dps->dp_tnlids, candidate->requested_tunnel_key)) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); VLOG_WARN_RL(&rl, "Logical datapath "UUID_FMT" requests same " @@ -258,7 +279,8 @@ assign_requested_tunnel_keys(struct vector *candidate_sdps, } sbrec_datapath_binding_set_tunnel_key(candidate->sdp->sb_dp, candidate->requested_tunnel_key); - hmap_insert(&synced_datapaths->synced_dps, &candidate->sdp->hmap_node, + hmap_insert(&all_dps->synced_dps[candidate->dp_type].synced_dps, + &candidate->sdp->hmap_node, uuid_hash(candidate->sdp->sb_dp->nb_uuid)); candidate->tunnel_key_assigned = true; } @@ -266,7 +288,7 @@ assign_requested_tunnel_keys(struct vector *candidate_sdps, static void assign_existing_tunnel_keys(struct vector *candidate_sdps, - struct ovn_synced_datapaths *synced_datapaths) + struct all_synced_datapaths *all_dps) { struct candidate_sdp *candidate; VECTOR_FOR_EACH_PTR (candidate_sdps, candidate) { @@ -277,9 +299,9 @@ assign_existing_tunnel_keys(struct vector *candidate_sdps, /* Existing southbound DP. If this key is available, * reuse it. */ - if (ovn_add_tnlid(&synced_datapaths->dp_tnlids, + if (ovn_add_tnlid(&all_dps->dp_tnlids, candidate->existing_tunnel_key)) { - hmap_insert(&synced_datapaths->synced_dps, + hmap_insert(&all_dps->synced_dps[candidate->dp_type].synced_dps, &candidate->sdp->hmap_node, uuid_hash(candidate->sdp->sb_dp->nb_uuid)); candidate->tunnel_key_assigned = true; @@ -290,7 +312,7 @@ assign_existing_tunnel_keys(struct vector *candidate_sdps, static void allocate_tunnel_keys(struct vector *candidate_sdps, uint32_t max_dp_tunnel_id, - struct ovn_synced_datapaths *synced_datapaths) + struct all_synced_datapaths *all_dps) { uint32_t hint = 0; struct candidate_sdp *candidate; @@ -299,7 +321,7 @@ allocate_tunnel_keys(struct vector *candidate_sdps, continue; } uint32_t tunnel_key = - ovn_allocate_tnlid(&synced_datapaths->dp_tnlids, "datapath", + ovn_allocate_tnlid(&all_dps->dp_tnlids, "datapath", OVN_MIN_DP_KEY_LOCAL, max_dp_tunnel_id, &hint); if (!tunnel_key) { @@ -307,7 +329,8 @@ allocate_tunnel_keys(struct vector *candidate_sdps, } sbrec_datapath_binding_set_tunnel_key(candidate->sdp->sb_dp, tunnel_key); - hmap_insert(&synced_datapaths->synced_dps, &candidate->sdp->hmap_node, + hmap_insert(&all_dps->synced_dps[candidate->dp_type].synced_dps, + &candidate->sdp->hmap_node, uuid_hash(candidate->sdp->sb_dp->nb_uuid)); candidate->tunnel_key_assigned = true; } @@ -330,10 +353,13 @@ static enum engine_input_handler_result datapath_sync_unsynced_datapath_handler( const struct ovn_unsynced_datapath_map *map, const struct ed_type_global_config *global_config, - struct ovsdb_idl_txn *ovnsb_idl_txn, void *data) + struct ovsdb_idl_txn *ovnsb_idl_txn, + enum ovn_datapath_type dp_type, void *data) { enum engine_input_handler_result ret = EN_HANDLED_UNCHANGED; - struct ovn_synced_datapaths *synced_datapaths = data; + struct all_synced_datapaths *all_dps = data; + struct ovn_synced_datapaths *synced_datapaths = + &all_dps->synced_dps[dp_type]; struct ovn_unsynced_datapath *udp; struct ovn_synced_datapath *sdp; @@ -352,7 +378,7 @@ datapath_sync_unsynced_datapath_handler( } hmap_remove(&synced_datapaths->synced_dps, &sdp->hmap_node); hmapx_add(&synced_datapaths->deleted, sdp); - ovn_free_tnlid(&synced_datapaths->dp_tnlids, + ovn_free_tnlid(&all_dps->dp_tnlids, sdp->sb_dp->tunnel_key); sbrec_datapath_binding_delete(sdp->sb_dp); ret = EN_HANDLED_UPDATED; @@ -368,12 +394,12 @@ datapath_sync_unsynced_datapath_handler( if (udp->requested_tunnel_key) { tunnel_key = udp->requested_tunnel_key; - if (!ovn_add_tnlid(&synced_datapaths->dp_tnlids, tunnel_key)) { + if (!ovn_add_tnlid(&all_dps->dp_tnlids, tunnel_key)) { return EN_UNHANDLED; } } else { uint32_t hint = 0; - tunnel_key = ovn_allocate_tnlid(&synced_datapaths->dp_tnlids, + tunnel_key = ovn_allocate_tnlid(&all_dps->dp_tnlids, "datapath", OVN_MIN_DP_KEY_LOCAL, global_config->max_dp_tunnel_id, &hint); @@ -401,9 +427,8 @@ datapath_sync_unsynced_datapath_handler( } if (udp->requested_tunnel_key && udp->requested_tunnel_key != sdp->sb_dp->tunnel_key) { - ovn_free_tnlid(&synced_datapaths->dp_tnlids, - sdp->sb_dp->tunnel_key); - if (!ovn_add_tnlid(&synced_datapaths->dp_tnlids, + ovn_free_tnlid(&all_dps->dp_tnlids, sdp->sb_dp->tunnel_key); + if (!ovn_add_tnlid(&all_dps->dp_tnlids, udp->requested_tunnel_key)) { return EN_UNHANDLED; } @@ -418,6 +443,7 @@ datapath_sync_unsynced_datapath_handler( ret = EN_HANDLED_UPDATED; } + all_dps->has_tracked_data = true; return ret; } @@ -432,6 +458,7 @@ datapath_sync_logical_switch_handler(struct engine_node *node, void *data) return datapath_sync_unsynced_datapath_handler(map, global_config, eng_ctx->ovnsb_idl_txn, + DP_SWITCH, data); } @@ -446,6 +473,7 @@ datapath_sync_logical_router_handler(struct engine_node *node, void *data) return datapath_sync_unsynced_datapath_handler(map, global_config, eng_ctx->ovnsb_idl_txn, + DP_ROUTER, data); } @@ -454,9 +482,9 @@ datapath_sync_global_config_handler(struct engine_node *node, void *data) { const struct ed_type_global_config *global_config = engine_get_input_data("global_config", node); - struct ovn_synced_datapaths *synced_datapaths = data; + struct all_synced_datapaths *all_dps = data; - if (synced_datapaths->vxlan_mode != + if (all_dps->vxlan_mode != global_config->vxlan_mode) { /* If VXLAN mode changes, then the range of datapath tunnel IDs * has completely been upended and we need to recompute. @@ -473,12 +501,21 @@ datapath_sync_sb_datapath_binding(struct engine_node *node, void *data) const struct sbrec_datapath_binding_table *sb_dp_table = EN_OVSDB_GET(engine_get_input("SB_datapath_binding", node)); enum engine_input_handler_result ret = EN_HANDLED_UNCHANGED; - struct ovn_synced_datapaths *synced_datapaths = data; + struct all_synced_datapaths *all_dps = data; const struct sbrec_datapath_binding *sb_dp; SBREC_DATAPATH_BINDING_TABLE_FOR_EACH_TRACKED (sb_dp, sb_dp_table) { + enum ovn_datapath_type dp_type = + ovn_datapath_type_from_string(datapath_get_nb_type(sb_dp)); + if (dp_type >= DP_MAX) { + /* We have an unrecognized datapath type in the SB DB. How? + * Gotta recompute and get rid of it. + */ + return EN_UNHANDLED; + } struct ovn_synced_datapath *sdp = - find_synced_datapath_from_sb(&synced_datapaths->synced_dps, sb_dp); + find_synced_datapath_from_sb( + &all_dps->synced_dps[dp_type].synced_dps, sb_dp); if (sbrec_datapath_binding_is_deleted(sb_dp)) { if (sdp) { /* The SB datapath binding was deleted, but we still have a @@ -530,9 +567,12 @@ datapath_sync_sb_datapath_binding(struct engine_node *node, void *data) void en_datapath_sync_clear_tracked_data(void *data) { - struct ovn_synced_datapaths *synced_datapaths = data; + struct all_synced_datapaths *all_dps = data; - clear_tracked_data(synced_datapaths); + for (enum ovn_datapath_type i = DP_MIN; i < DP_MAX; i++) { + clear_tracked_data(&all_dps->synced_dps[i]); + } + all_dps->has_tracked_data = false; } enum engine_node_state @@ -548,7 +588,7 @@ en_datapath_sync_run(struct engine_node *node , void *data) engine_get_input_data("datapath_logical_router", node); const struct ovn_unsynced_datapath_map *input_maps[DP_MAX]; - struct ovn_synced_datapaths *synced_datapaths = data; + struct all_synced_datapaths *all_synced_datapaths = data; input_maps[unsynced_ls_map->dp_type] = unsynced_ls_map; input_maps[unsynced_lr_map->dp_type] = unsynced_lr_map; @@ -559,9 +599,9 @@ en_datapath_sync_run(struct engine_node *node , void *data) num_datapaths += hmap_count(&input_maps[i]->dps); } - reset_synced_datapaths(synced_datapaths); + reset_synced_datapaths(all_synced_datapaths); - synced_datapaths->vxlan_mode = global_config->vxlan_mode; + all_synced_datapaths->vxlan_mode = global_config->vxlan_mode; struct uuidset visited = UUIDSET_INITIALIZER(&visited); struct vector candidate_sdps = @@ -575,10 +615,10 @@ en_datapath_sync_run(struct engine_node *node , void *data) &candidate_sdps); uuidset_destroy(&visited); - assign_requested_tunnel_keys(&candidate_sdps, synced_datapaths); - assign_existing_tunnel_keys(&candidate_sdps, synced_datapaths); + assign_requested_tunnel_keys(&candidate_sdps, all_synced_datapaths); + assign_existing_tunnel_keys(&candidate_sdps, all_synced_datapaths); allocate_tunnel_keys(&candidate_sdps, global_config->max_dp_tunnel_id, - synced_datapaths); + all_synced_datapaths); delete_unassigned_candidates(&candidate_sdps); vector_destroy(&candidate_sdps); @@ -586,11 +626,9 @@ en_datapath_sync_run(struct engine_node *node , void *data) return EN_UPDATED; } -void en_datapath_sync_cleanup(void *data) +static void +synced_datapaths_cleanup(struct ovn_synced_datapaths *synced_datapaths) { - struct ovn_synced_datapaths *synced_datapaths = data; - struct ovn_synced_datapath *sdp; - hmapx_destroy(&synced_datapaths->new); hmapx_destroy(&synced_datapaths->updated); struct hmapx_node *node; @@ -599,9 +637,19 @@ void en_datapath_sync_cleanup(void *data) } hmapx_destroy(&synced_datapaths->deleted); + struct ovn_synced_datapath *sdp; HMAP_FOR_EACH_POP (sdp, hmap_node, &synced_datapaths->synced_dps) { free(sdp); } hmap_destroy(&synced_datapaths->synced_dps); - ovn_destroy_tnlids(&synced_datapaths->dp_tnlids); +} + +void en_datapath_sync_cleanup(void *data) +{ + struct all_synced_datapaths *all_dps = data; + + for (enum ovn_datapath_type i = DP_MIN; i < DP_MAX; i++) { + synced_datapaths_cleanup(&all_dps->synced_dps[i]); + } + ovn_destroy_tnlids(&all_dps->dp_tnlids); } diff --git a/northd/en-datapath-sync.h b/northd/en-datapath-sync.h index 0f7a85d1d..39daee505 100644 --- a/northd/en-datapath-sync.h +++ b/northd/en-datapath-sync.h @@ -18,6 +18,14 @@ #define EN_DATAPATH_SYNC_H #include "inc-proc-eng.h" +#include "datapath-sync.h" + +struct all_synced_datapaths { + struct ovn_synced_datapaths synced_dps[DP_MAX]; + struct hmap dp_tnlids; + bool vxlan_mode; + bool has_tracked_data; +}; void *en_datapath_sync_init(struct engine_node *, struct engine_arg *); -- 2.51.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
