On 8/30/23 13:10, Ales Musil wrote:
> The affinity code was differentiating between force_snat
> and skip snat. However, if both parameters were set at the
> same time the force_snat would be preferred, which shouldn't
> be the case.
> 
> Make sure the skip_snat is preferred if both parameters are
> present.
> 
> Fixes: d3926b4 ("northd: rely on new actions for lb affinity")
> Reported-at: https://bugzilla.redhat.com/2224260
> Signed-off-by: Ales Musil <[email protected]>
> Signed-off-by: Dumitru Ceara <[email protected]>
> (cherry picked from commit 0f4df76)
> ---
>  northd/northd.c     | 20 +++++++++++++++-----
>  tests/ovn-northd.at | 19 +++++++++++++++++++
>  2 files changed, 34 insertions(+), 5 deletions(-)
> 
> diff --git a/northd/northd.c b/northd/northd.c
> index 00a9013dd..fd1f9c629 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -10669,6 +10669,10 @@ build_lrouter_nat_flows_for_lb(struct ovn_lb_vip 
> *lb_vip,
>          xcalloc(lb->n_nb_lr, sizeof *distributed_router);
>      int n_distributed_router = 0;
>  
> +    struct ovn_datapath **lb_aff_skip_snat_router =
> +        xcalloc(lb->n_nb_lr, sizeof *lb_aff_skip_snat_router);
> +    int n_lb_aff_skip_snat_router = 0;
> +
>      struct ovn_datapath **lb_aff_force_snat_router =
>          xcalloc(lb->n_nb_lr, sizeof *lb_aff_force_snat_router);
>      int n_lb_aff_force_snat_router = 0;
> @@ -10695,7 +10699,9 @@ build_lrouter_nat_flows_for_lb(struct ovn_lb_vip 
> *lb_vip,
>              distributed_router[n_distributed_router++] = od;
>          }
>  
> -        if (!lport_addresses_is_empty(&od->lb_force_snat_addrs) ||
> +        if (lb->skip_snat) {
> +            lb_aff_skip_snat_router[n_lb_aff_skip_snat_router++] = od;
> +        } else if (!lport_addresses_is_empty(&od->lb_force_snat_addrs) ||
>              od->lb_force_snat_router_ip) {
>              lb_aff_force_snat_router[n_lb_aff_force_snat_router++] = od;
>          } else {
> @@ -10752,11 +10758,14 @@ build_lrouter_nat_flows_for_lb(struct ovn_lb_vip 
> *lb_vip,
>              "next;", lflows, prio, meter_groups);
>  
>      /* LB affinity flows for datapaths where CMS has specified
> -     * skip_snat_for_lb floag option or regular datapaths.
> +     * skip_snat_for_lb flag option.
>       */
> -    char *lb_aff_action =
> -        lb->skip_snat ? "flags.skip_snat_for_lb = 1; " : NULL;
> -    build_lb_affinity_lr_flows(lflows, lb, lb_vip, new_match, lb_aff_action,
> +    build_lb_affinity_lr_flows(lflows, lb, lb_vip, new_match,
> +                               "flags.skip_snat_for_lb = 1; ",
> +                               lb_aff_skip_snat_router,
> +                               n_lb_aff_skip_snat_router);
> +
> +    build_lb_affinity_lr_flows(lflows, lb, lb_vip, new_match, NULL,
>                                 lb_aff_router, n_lb_aff_router);
>  
>      /* Distributed router logic */
> @@ -10852,6 +10861,7 @@ build_lrouter_nat_flows_for_lb(struct ovn_lb_vip 
> *lb_vip,
>      free(gw_router_force_snat);
>      free(gw_router_skip_snat);
>      free(distributed_router);
> +    free(lb_aff_skip_snat_router);
>      free(lb_aff_force_snat_router);
>      free(lb_aff_router);
>      free(gw_router);
> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
> index b50f23e19..4e8eb38b8 100644
> --- a/tests/ovn-northd.at
> +++ b/tests/ovn-northd.at
> @@ -8334,6 +8334,25 @@ AT_CHECK([grep "lr_in_dnat " R1flows_force_snat | 
> sort], [0], [dnl
>    table=7 (lr_in_dnat         ), priority=70   , match=(ct.rel && !ct.est && 
> !ct.new && ct_mark.skip_snat == 1), action=(flags.skip_snat_for_lb = 1; 
> ct_commit_nat;)
>  ])
>  
> +AS_BOX([Test LR flows - lb_force_snat_ip="172.16.0.1" + skip_snat=true])
> +check ovn-nbctl --wait=sb set logical_router R1 
> options:lb_force_snat_ip="172.16.0.1"
> +check ovn-nbctl --wait=sb set load_balancer lb0 options:skip_snat=true
> +
> +ovn-sbctl dump-flows R1 > R1flows_force_skip_snat
> +AT_CAPTURE_FILE([R1flows_force_skip_snat])
> +
> +grep "lr_in_dnat " R1flows_force_skip_snat | sed 's/table=../table=??/' | 
> sort

I removed this unrelated "grep" and then applied the patch to branch
22.12.  Thanks for the backport, Ales!

Regards,
Dumitru

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to