On Wed, Apr 14, 2021 at 12:55 PM Lorenzo Bianconi
<[email protected]> wrote:
>
> Localports should not be binded to any specific controller but should be
> available to each hv however in the current codebase consider_iface_claim
> routine is claiming the localport for a specific chassis.
> Fix the issue skipping localports in consider_iface_claim routine.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1937662
>
> Reviewed-by: Mark D. Gray <[email protected]>
> Signed-off-by: Lorenzo Bianconi <[email protected]>

Hi Lorenzo,

I suppose there is no need for this patch since the commit
https://github.com/ovn-org/ovn/commit/e1e78b4b1481da69221b1cae999cbcc7d96fb458
addresses this issue.

Thanks
Numan

> ---
> Changes since v2:
> - rebase on top of ovn master
>
> Changes since v1:
> - move lport_lookup before local_binding_find
> - fix commit message
> ---
>  controller/binding.c | 10 +++++++---
>  tests/ovn.at         |  3 +++
>  2 files changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/controller/binding.c b/controller/binding.c
> index 514f5f33f..6e944f805 100644
> --- a/controller/binding.c
> +++ b/controller/binding.c
> @@ -1875,6 +1875,13 @@ consider_iface_claim(const struct ovsrec_interface 
> *iface_rec,
>      update_local_lports(iface_id, b_ctx_out);
>      smap_replace(b_ctx_out->local_iface_ids, iface_rec->name, iface_id);
>
> +    const struct sbrec_port_binding *pb =
> +        lport_lookup_by_name(b_ctx_in->sbrec_port_binding_by_name, iface_id);
> +    if (pb && get_lport_type(pb) == LP_LOCALPORT) {
> +        /* nothing to do for localports. */
> +        return true;
> +    }
> +
>      struct shash *local_bindings = &b_ctx_out->lbinding_data->bindings;
>      struct shash *binding_lports = &b_ctx_out->lbinding_data->lports;
>      struct local_binding *lbinding = local_binding_find(local_bindings,
> @@ -1888,10 +1895,7 @@ consider_iface_claim(const struct ovsrec_interface 
> *iface_rec,
>      }
>
>      struct binding_lport *b_lport = 
> local_binding_get_primary_lport(lbinding);
> -    const struct sbrec_port_binding *pb = NULL;
>      if (!b_lport) {
> -        pb = lport_lookup_by_name(b_ctx_in->sbrec_port_binding_by_name,
> -                                  lbinding->name);
>          if (pb && get_lport_type(pb) == LP_VIF) {
>              b_lport = local_binding_add_lport(binding_lports, lbinding, pb,
>                                                LP_VIF);
> diff --git a/tests/ovn.at b/tests/ovn.at
> index 4c3d76d57..3a53039c0 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -11698,6 +11698,9 @@ test_packet() {
>      fi
>  }
>
> +# Check the localport is not claimed by the hvs
> +chassis_lp=$(fetch_column port_binding chassis logical_port=lp01)
> +AT_CHECK([$(fetch_column port_binding chassis logical_port=lp01)], [0])
>
>  # lp11 and lp21 are on different hypervisors
>  test_packet 11 f0:00:00:00:00:21 f0:00:00:00:00:11 1121 lp21 lp21
> --
> 2.30.2
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to