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