On 7/2/21 7:16 PM, Lorenzo Bianconi wrote:
> Remove add_router_lb_flow routine and move leftover lb flow
> installation code in build_lrouter_snat_flows_for_lb routine
> 
> Signed-off-by: Lorenzo Bianconi <[email protected]>
> ---

[...]

> @@ -11828,6 +11795,7 @@ static void
>  build_lrouter_nat_defrag_and_lb(struct ovn_datapath *od,
>                                  struct hmap *lflows,
>                                  struct hmap *lbs,
> +                                struct sset *nat_entries,
>                                  struct ds *match, struct ds *actions)
>  {
>      if (!od->nbr) {
> @@ -11855,8 +11823,6 @@ build_lrouter_nat_defrag_and_lb(struct ovn_datapath 
> *od,
>          return;
>      }
>  
> -    struct sset nat_entries = SSET_INITIALIZER(&nat_entries);
> -
>      bool dnat_force_snat_ip =
>          !lport_addresses_is_empty(&od->dnat_force_snat_addrs);
>      bool lb_force_snat_ip =
> @@ -11883,7 +11849,7 @@ build_lrouter_nat_defrag_and_lb(struct ovn_datapath 
> *od,
>  
>          /* ARP resolve for NAT IPs. */
>          if (od->l3dgw_port) {
> -            if (!sset_contains(&nat_entries, nat->external_ip)) {
> +            if (!sset_contains(nat_entries, nat->external_ip)) {
>                  ds_clear(match);
>                  ds_put_format(
>                      match, "outport == %s && %s == %s",
> @@ -11900,13 +11866,13 @@ build_lrouter_nat_defrag_and_lb(struct ovn_datapath 
> *od,
>                                          100, ds_cstr(match),
>                                          ds_cstr(actions),
>                                          &nat->header_);
> -                sset_add(&nat_entries, nat->external_ip);
> +                sset_add(nat_entries, nat->external_ip);

I think this is still not correct, like in v3; we still add *all*
nat->external_ip from *all* logical routers to a (almost) global sset.

I think it's best to add a field to "struct ovn_datapath" (after
'nat_entries'), e.g., "struct sset nat_external_ips".

We can populate that one in init_nat_entries() and clean it up in
destroy_nat_entries().  These get called exactly once for each logical
router in one iteration of the northd processing loop.

Thanks,
Dumitru

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

Reply via email to