On 11/28/23 03:36, num...@ovn.org wrote: > From: Numan Siddique <num...@ovn.org> > > Signed-off-by: Numan Siddique <num...@ovn.org> > --- > lib/lb.c | 96 ----------------------------------------- > lib/lb.h | 57 ------------------------- > northd/northd.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++ > northd/northd.h | 28 ++++++++++++ > 4 files changed, 139 insertions(+), 153 deletions(-) > > diff --git a/lib/lb.c b/lib/lb.c > index d0d562b6fb..991f20299d 100644 > --- a/lib/lb.c > +++ b/lib/lb.c > @@ -1071,99 +1071,3 @@ remove_ips_from_lb_ip_set(struct ovn_lb_ip_set *lb_ips, > } > } > } > - > -/* lb datapaths functions */ > -struct ovn_lb_datapaths * > -ovn_lb_datapaths_create(const struct ovn_northd_lb *lb, size_t > n_ls_datapaths, > - size_t n_lr_datapaths) > -{ > - struct ovn_lb_datapaths *lb_dps = xzalloc(sizeof *lb_dps); > - lb_dps->lb = lb; > - lb_dps->nb_ls_map = bitmap_allocate(n_ls_datapaths); > - lb_dps->nb_lr_map = bitmap_allocate(n_lr_datapaths); > - > - return lb_dps; > -} > - > -struct ovn_lb_datapaths * > -ovn_lb_datapaths_find(const struct hmap *lb_dps_map, > - const struct uuid *lb_uuid) > -{ > - struct ovn_lb_datapaths *lb_dps; > - size_t hash = uuid_hash(lb_uuid); > - HMAP_FOR_EACH_WITH_HASH (lb_dps, hmap_node, hash, lb_dps_map) { > - if (uuid_equals(&lb_dps->lb->nlb->header_.uuid, lb_uuid)) { > - return lb_dps; > - } > - } > - return NULL; > -} > - > -void > -ovn_lb_datapaths_destroy(struct ovn_lb_datapaths *lb_dps) > -{ > - bitmap_free(lb_dps->nb_lr_map); > - bitmap_free(lb_dps->nb_ls_map); > - free(lb_dps); > -} > - > -void > -ovn_lb_datapaths_add_lr(struct ovn_lb_datapaths *lb_dps, size_t n, > - struct ovn_datapath **ods) > -{ > - for (size_t i = 0; i < n; i++) { > - if (!bitmap_is_set(lb_dps->nb_lr_map, ods[i]->index)) { > - bitmap_set1(lb_dps->nb_lr_map, ods[i]->index); > - lb_dps->n_nb_lr++; > - } > - } > -} > - > -void > -ovn_lb_datapaths_add_ls(struct ovn_lb_datapaths *lb_dps, size_t n, > - struct ovn_datapath **ods) > -{ > - for (size_t i = 0; i < n; i++) { > - if (!bitmap_is_set(lb_dps->nb_ls_map, ods[i]->index)) { > - bitmap_set1(lb_dps->nb_ls_map, ods[i]->index); > - lb_dps->n_nb_ls++; > - } > - } > -} > - > -struct ovn_lb_group_datapaths * > -ovn_lb_group_datapaths_create(const struct ovn_lb_group *lb_group, > - size_t max_ls_datapaths, > - size_t max_lr_datapaths) > -{ > - struct ovn_lb_group_datapaths *lb_group_dps = > - xzalloc(sizeof *lb_group_dps); > - lb_group_dps->lb_group = lb_group; > - lb_group_dps->ls = xmalloc(max_ls_datapaths * sizeof *lb_group_dps->ls); > - lb_group_dps->lr = xmalloc(max_lr_datapaths * sizeof *lb_group_dps->lr); > - > - return lb_group_dps; > -} > - > -void > -ovn_lb_group_datapaths_destroy(struct ovn_lb_group_datapaths *lb_group_dps) > -{ > - free(lb_group_dps->ls); > - free(lb_group_dps->lr); > - free(lb_group_dps); > -} > - > -struct ovn_lb_group_datapaths * > -ovn_lb_group_datapaths_find(const struct hmap *lb_group_dps_map, > - const struct uuid *lb_group_uuid) > -{ > - struct ovn_lb_group_datapaths *lb_group_dps; > - size_t hash = uuid_hash(lb_group_uuid); > - > - HMAP_FOR_EACH_WITH_HASH (lb_group_dps, hmap_node, hash, > lb_group_dps_map) { > - if (uuid_equals(&lb_group_dps->lb_group->uuid, lb_group_uuid)) { > - return lb_group_dps; > - } > - } > - return NULL; > -} > diff --git a/lib/lb.h b/lib/lb.h > index b8e3c1e8fb..90ac39ee5a 100644 > --- a/lib/lb.h > +++ b/lib/lb.h > @@ -167,63 +167,6 @@ void ovn_lb_group_reinit( > const struct nbrec_load_balancer_group *, > const struct hmap *lbs); > > -struct ovn_lb_datapaths { > - struct hmap_node hmap_node; > - > - const struct ovn_northd_lb *lb; > - size_t n_nb_ls; > - unsigned long *nb_ls_map; > - > - size_t n_nb_lr; > - unsigned long *nb_lr_map; > -}; > - > -struct ovn_lb_datapaths *ovn_lb_datapaths_create(const struct ovn_northd_lb > *, > - size_t n_ls_datapaths, > - size_t n_lr_datapaths); > -struct ovn_lb_datapaths *ovn_lb_datapaths_find(const struct hmap *, > - const struct uuid *); > -void ovn_lb_datapaths_destroy(struct ovn_lb_datapaths *); > -void ovn_lb_datapaths_add_lr(struct ovn_lb_datapaths *, size_t n, > - struct ovn_datapath **); > -void ovn_lb_datapaths_add_ls(struct ovn_lb_datapaths *, size_t n, > - struct ovn_datapath **); > - > -struct ovn_lb_group_datapaths { > - struct hmap_node hmap_node; > - > - const struct ovn_lb_group *lb_group; > - > - /* Datapaths to which 'lb_group' is applied. */ > - size_t n_ls; > - struct ovn_datapath **ls; > - size_t n_lr; > - struct ovn_datapath **lr; > -}; > - > -struct ovn_lb_group_datapaths *ovn_lb_group_datapaths_create( > - const struct ovn_lb_group *, size_t max_ls_datapaths, > - size_t max_lr_datapaths); > - > -void ovn_lb_group_datapaths_destroy(struct ovn_lb_group_datapaths *); > -struct ovn_lb_group_datapaths *ovn_lb_group_datapaths_find( > - const struct hmap *lb_group_dps, const struct uuid *); > - > -static inline void > -ovn_lb_group_datapaths_add_ls(struct ovn_lb_group_datapaths *lbg_dps, size_t > n, > - struct ovn_datapath **ods) > -{ > - memcpy(&lbg_dps->ls[lbg_dps->n_ls], ods, n * sizeof *ods); > - lbg_dps->n_ls += n; > -} > - > -static inline void > -ovn_lb_group_datapaths_add_lr(struct ovn_lb_group_datapaths *lbg_dps, > - struct ovn_datapath *lr) > -{ > - lbg_dps->lr[lbg_dps->n_lr++] = lr; > -} > - > struct ovn_controller_lb { > struct hmap_node hmap_node; > > diff --git a/northd/northd.c b/northd/northd.c > index 7c5fe60e9a..104068e293 100644 > --- a/northd/northd.c > +++ b/northd/northd.c > @@ -3514,6 +3514,117 @@ build_lb_vip_actions(const struct ovn_northd_lb *lb, > return reject; > } > > +/* lb datapaths functions */ > +static struct ovn_lb_datapaths * > +ovn_lb_datapaths_create(const struct ovn_northd_lb *lb, size_t > n_ls_datapaths, > + size_t n_lr_datapaths) > +{ > + struct ovn_lb_datapaths *lb_dps = xzalloc(sizeof *lb_dps); > + lb_dps->lb = lb; > + lb_dps->nb_ls_map = bitmap_allocate(n_ls_datapaths); > + lb_dps->nb_lr_map = bitmap_allocate(n_lr_datapaths); > +
Checking how the tree looks after the last patch is applied I see that you needed to be able to store a 'lflow_ref' pointer in 'struct ovn_lb_datapaths'. If we'd move the northd-specific LB code from lib/lb.c to a new northd/lb.{ch} (or similar) that should still be possible and it would avoid adding some of the LB specific code back to northd.c. What do you think? Thanks, Dumitru > + return lb_dps; > +} > + > +static void > +ovn_lb_datapaths_destroy(struct ovn_lb_datapaths *lb_dps) > +{ > + bitmap_free(lb_dps->nb_lr_map); > + bitmap_free(lb_dps->nb_ls_map); > + free(lb_dps); > +} > + > +static void > +ovn_lb_datapaths_add_lr(struct ovn_lb_datapaths *lb_dps, size_t n, > + struct ovn_datapath **ods) > +{ > + for (size_t i = 0; i < n; i++) { > + if (!bitmap_is_set(lb_dps->nb_lr_map, ods[i]->index)) { > + bitmap_set1(lb_dps->nb_lr_map, ods[i]->index); > + lb_dps->n_nb_lr++; > + } > + } > +} > + > +static void > +ovn_lb_datapaths_add_ls(struct ovn_lb_datapaths *lb_dps, size_t n, > + struct ovn_datapath **ods) > +{ > + for (size_t i = 0; i < n; i++) { > + if (!bitmap_is_set(lb_dps->nb_ls_map, ods[i]->index)) { > + bitmap_set1(lb_dps->nb_ls_map, ods[i]->index); > + lb_dps->n_nb_ls++; > + } > + } > +} > + > +static struct ovn_lb_group_datapaths * > +ovn_lb_group_datapaths_create(const struct ovn_lb_group *lb_group, > + size_t max_ls_datapaths, > + size_t max_lr_datapaths) > +{ > + struct ovn_lb_group_datapaths *lb_group_dps = > + xzalloc(sizeof *lb_group_dps); > + lb_group_dps->lb_group = lb_group; > + lb_group_dps->ls = xmalloc(max_ls_datapaths * sizeof *lb_group_dps->ls); > + lb_group_dps->lr = xmalloc(max_lr_datapaths * sizeof *lb_group_dps->lr); > + > + return lb_group_dps; > +} > + > +static void > +ovn_lb_group_datapaths_destroy(struct ovn_lb_group_datapaths *lb_group_dps) > +{ > + free(lb_group_dps->ls); > + free(lb_group_dps->lr); > + free(lb_group_dps); > +} > + > +static void > +ovn_lb_group_datapaths_add_ls(struct ovn_lb_group_datapaths *lbg_dps, size_t > n, > + struct ovn_datapath **ods) > +{ > + memcpy(&lbg_dps->ls[lbg_dps->n_ls], ods, n * sizeof *ods); > + lbg_dps->n_ls += n; > +} > + > +static void > +ovn_lb_group_datapaths_add_lr(struct ovn_lb_group_datapaths *lbg_dps, > + struct ovn_datapath *lr) > +{ > + lbg_dps->lr[lbg_dps->n_lr++] = lr; > +} > + > +struct ovn_lb_datapaths * > +ovn_lb_datapaths_find(const struct hmap *lb_dps_map, > + const struct uuid *lb_uuid) > +{ > + struct ovn_lb_datapaths *lb_dps; > + size_t hash = uuid_hash(lb_uuid); > + HMAP_FOR_EACH_WITH_HASH (lb_dps, hmap_node, hash, lb_dps_map) { > + if (uuid_equals(&lb_dps->lb->nlb->header_.uuid, lb_uuid)) { > + return lb_dps; > + } > + } > + return NULL; > +} > + > +struct ovn_lb_group_datapaths * > +ovn_lb_group_datapaths_find(const struct hmap *lb_group_dps_map, > + const struct uuid *lb_group_uuid) > +{ > + struct ovn_lb_group_datapaths *lb_group_dps; > + size_t hash = uuid_hash(lb_group_uuid); > + > + HMAP_FOR_EACH_WITH_HASH (lb_group_dps, hmap_node, hash, > lb_group_dps_map) { > + if (uuid_equals(&lb_group_dps->lb_group->uuid, lb_group_uuid)) { > + return lb_group_dps; > + } > + } > + return NULL; > +} > + > static void > build_lb_datapaths(const struct hmap *lbs, const struct hmap *lb_groups, > struct ovn_datapaths *ls_datapaths, > diff --git a/northd/northd.h b/northd/northd.h > index cce465b699..e2df53e6f8 100644 > --- a/northd/northd.h > +++ b/northd/northd.h > @@ -92,6 +92,29 @@ ods_size(const struct ovn_datapaths *datapaths) > > bool od_has_lb_vip(const struct ovn_datapath *od); > > +struct ovn_lb_datapaths { > + struct hmap_node hmap_node; > + > + const struct ovn_northd_lb *lb; > + size_t n_nb_ls; > + unsigned long *nb_ls_map; > + > + size_t n_nb_lr; > + unsigned long *nb_lr_map; > +}; > + > +struct ovn_lb_group_datapaths { > + struct hmap_node hmap_node; > + > + const struct ovn_lb_group *lb_group; > + > + /* Datapaths to which 'lb_group' is applied. */ > + size_t n_ls; > + struct ovn_datapath **ls; > + size_t n_lr; > + struct ovn_datapath **lr; > +}; > + > struct tracked_ovn_ports { > /* tracked created ports. > * hmapx node data is 'struct ovn_port *' */ > @@ -106,6 +129,11 @@ struct tracked_ovn_ports { > struct hmapx deleted; > }; > > +struct ovn_lb_datapaths *ovn_lb_datapaths_find(const struct hmap *, > + const struct uuid *); > +struct ovn_lb_group_datapaths *ovn_lb_group_datapaths_find( > + const struct hmap *lb_group_dps, const struct uuid *); > + > struct tracked_lbs { > /* Tracked created or updated load balancers. > * hmapx node data is 'struct ovn_lb_datapaths' */ _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev