On Tue, Sep 28, 2021 at 11:54 AM Frode Nordahl <frode.nord...@canonical.com> wrote: > > The binding module maintains a shash of lports bound to the local > chassis. Other modules have interest in the same data for lookup, > and it would be wasteful to reimplement the same data structure > elsewhere. > > The incremental processing engine already makes sharing of the > data between nodes safe and convenient and this change makes it > possible for a different module to consume the data. > > Signed-off-by: Frode Nordahl <frode.nord...@canonical.com>
Acked-by: Numan Siddique <num...@ovn.org> Numan > --- > controller/binding.c | 34 +--------------------------------- > controller/binding.h | 34 ++++++++++++++++++++++++++++++++++ > 2 files changed, 35 insertions(+), 33 deletions(-) > > diff --git a/controller/binding.c b/controller/binding.c > index ecfddced5..2fde7629c 100644 > --- a/controller/binding.c > +++ b/controller/binding.c > @@ -507,36 +507,6 @@ update_active_pb_ras_pd(const struct sbrec_port_binding > *pb, > } > } > > -/* Local bindings. binding.c module binds the logical port (represented by > - * Port_Binding rows) and sets the 'chassis' column when it sees the > - * OVS interface row (of type "" or "internal") with the > - * external_ids:iface-id=<logical_port name> set. > - * > - * This module also manages the other port_bindings. > - * > - * To better manage the local bindings with the associated OVS interfaces, > - * 'struct local_binding' is used. A shash of these local bindings is > - * maintained with the 'external_ids:iface-id' as the key to the shash. > - * > - * struct local_binding has 3 main fields: > - * - name : 'external_ids:iface-id' of the OVS interface (key). > - * - OVS interface row object. > - * - List of 'binding_lport' objects with the primary lport > - * in the front of the list (if present). > - * > - * An object of 'struct local_binding' is created: > - * - For each interface that has external_ids:iface-id configured. > - * > - * - For each port binding (also referred as lport) of type 'LP_VIF' > - * if it is a parent lport of container lports even if there is no > - * corresponding OVS interface. > - */ > -struct local_binding { > - char *name; > - const struct ovsrec_interface *iface; > - struct ovs_list binding_lports; > -}; > - > /* This structure represents a logical port (or port binding) > * which is associated with 'struct local_binding'. > * > @@ -559,8 +529,6 @@ static struct local_binding *local_binding_create( > const char *name, const struct ovsrec_interface *); > static void local_binding_add(struct shash *local_bindings, > struct local_binding *); > -static struct local_binding *local_binding_find( > - const struct shash *local_bindings, const char *name); > static void local_binding_destroy(struct local_binding *, > struct shash *binding_lports); > static void local_binding_delete(struct local_binding *, > @@ -2520,7 +2488,7 @@ local_binding_create(const char *name, const struct > ovsrec_interface *iface) > return lbinding; > } > > -static struct local_binding * > +struct local_binding * > local_binding_find(const struct shash *local_bindings, const char *name) > { > return shash_find_data(local_bindings, name); > diff --git a/controller/binding.h b/controller/binding.h > index 70cc37c78..430a8d9b1 100644 > --- a/controller/binding.h > +++ b/controller/binding.h > @@ -104,11 +104,45 @@ struct binding_ctx_out { > struct if_status_mgr *if_mgr; > }; > > +/* Local bindings. binding.c module binds the logical port (represented by > + * Port_Binding rows) and sets the 'chassis' column when it sees the > + * OVS interface row (of type "" or "internal") with the > + * external_ids:iface-id=<logical_port name> set. > + * > + * This module also manages the other port_bindings. > + * > + * To better manage the local bindings with the associated OVS interfaces, > + * 'struct local_binding' is used. A shash of these local bindings is > + * maintained with the 'external_ids:iface-id' as the key to the shash. > + * > + * struct local_binding has 3 main fields: > + * - name : 'external_ids:iface-id' of the OVS interface (key). > + * - OVS interface row object. > + * - List of 'binding_lport' objects with the primary lport > + * in the front of the list (if present). > + * > + * An object of 'struct local_binding' is created: > + * - For each interface that has external_ids:iface-id configured. > + * > + * - For each port binding (also referred as lport) of type 'LP_VIF' > + * if it is a parent lport of container lports even if there is no > + * corresponding OVS interface. > + */ > +struct local_binding { > + char *name; > + const struct ovsrec_interface *iface; > + struct ovs_list binding_lports; > +}; > + > + > struct local_binding_data { > struct shash bindings; > struct shash lports; > }; > > +struct local_binding *local_binding_find( > + const struct shash *local_bindings, const char *name); > + > void local_binding_data_init(struct local_binding_data *); > void local_binding_data_destroy(struct local_binding_data *); > > -- > 2.32.0 > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev