[ovs-dev] [PATCH ovn v6 07/12] binding: Make local_binding data structure public

Numan Siddique numans at ovn.org
Tue Oct 5 02:40:48 UTC 2021


On Tue, Sep 28, 2021 at 11:54 AM Frode Nordahl
<frode.nordahl at 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.nordahl at canonical.com>

Acked-by: Numan Siddique <numans at 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
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>


More information about the dev mailing list