On Thu, Mar 13, 2025 at 9:33 AM Xavier Simonart <xsimo...@redhat.com> wrote:

> Before the patch, LOG_CT_ZONE might have been set twice, when virtual or
> localports are present.
>
> For virtual ports, for which a ct_zone is allocated when recomputing but
> not
> in incremental processing, this also resulted in differences between flows
> produced by recompute and incremental processing.
>
> A future patch will be checking the differences between recompute and
> incremental processing produced flows in all tests.
>
> Signed-off-by: Xavier Simonart <xsimo...@redhat.com>
>
> ---
> v2: - Rebased on origin/main.
>     - Updated commit message (as per Numan's feedback).
>     - Avoid code duplication (as per Dumitru's feedback).
>
> Signed-off-by: Xavier Simonart <xsimo...@redhat.com>
> ---
>  controller/physical.c | 26 +++++++++++++++++++-------
>  1 file changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/controller/physical.c b/controller/physical.c
> index 69bf05347..48bf0717c 100644
> --- a/controller/physical.c
> +++ b/controller/physical.c
> @@ -2178,6 +2178,17 @@ local_output_pb(int64_t tunnel_key, struct ofpbuf
> *ofpacts)
>      put_resubmit(OFTABLE_CHECK_LOOPBACK, ofpacts);
>  }
>
> +static void
> +local_set_ct_zone_and_output_pb(int tunnel_key, int64_t zone_id,
> +                                struct ofpbuf *ofpacts)
> +{
> +    if (zone_id) {
> +        put_load(zone_id, MFF_LOG_CT_ZONE, 0, 16, ofpacts);
> +    }
> +    put_load(tunnel_key, MFF_LOG_OUTPORT, 0, 32, ofpacts);
> +    put_resubmit(OFTABLE_CHECK_LOOPBACK, ofpacts);
> +}
> +
>  #define MC_OFPACTS_MAX_MSG_SIZE     8192
>  #define MC_BUF_START_ID             0x9000
>
> @@ -2279,16 +2290,14 @@ consider_mc_group(const struct physical_ctx *ctx,
>          }
>
>          int zone_id = ct_zone_find_zone(ctx->ct_zones,
> port->logical_port);
> -        if (zone_id) {
> -            put_load(zone_id, MFF_LOG_CT_ZONE, 0, 16, &ofpacts);
> -        }
>
>          const char *lport_name = (port->parent_port &&
> *port->parent_port) ?
>                                    port->parent_port : port->logical_port;
>
>          if (type == LP_PATCH) {
>              if (ldp->is_transit_switch) {
> -                local_output_pb(port->tunnel_key, &ofpacts);
> +                local_set_ct_zone_and_output_pb(port->tunnel_key, zone_id,
> +                                                &ofpacts);
>              } else {
>                  remote_ramp_ports = true;
>                  remote_ports = true;
> @@ -2304,9 +2313,11 @@ consider_mc_group(const struct physical_ctx *ctx,
>                     && (local_binding_get_primary_pb(ctx->local_bindings,
>                                                      lport_name)
>                         || type == LP_L3GATEWAY)) {
> -            local_output_pb(port->tunnel_key, &ofpacts);
> +            local_set_ct_zone_and_output_pb(port->tunnel_key, zone_id,
> +                                            &ofpacts);
>          } else if (simap_contains(ctx->patch_ofports,
> port->logical_port)) {
> -            local_output_pb(port->tunnel_key, &ofpacts);
> +            local_set_ct_zone_and_output_pb(port->tunnel_key, zone_id,
> +                                            &ofpacts);
>          } else if (type == LP_CHASSISREDIRECT
>                     && port->chassis == ctx->chassis) {
>              const char *distributed_port = smap_get(&port->options,
> @@ -2317,7 +2328,8 @@ consider_mc_group(const struct physical_ctx *ctx,
>                                             distributed_port);
>                  if (distributed_binding
>                      && port->datapath == distributed_binding->datapath) {
> -                    local_output_pb(distributed_binding->tunnel_key,
> &ofpacts);
> +                    local_set_ct_zone_and_output_pb(
> +                        distributed_binding->tunnel_key, zone_id,
> &ofpacts);
>                  }
>              }
>          } else if (!get_localnet_port(ctx->local_datapaths,
> --
> 2.47.1
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
Looks good to me, thanks!
Acked-by: Ales Musil <amu...@redhat.com>
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to