This is a preliminary patch to reduce load balancer logical flows computation cost for gw routers.
Signed-off-by: Lorenzo Bianconi <lorenzo.bianc...@redhat.com> --- northd/northd.c | 61 +++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/northd/northd.c b/northd/northd.c index e7901f348..53edf2efd 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -10005,10 +10005,6 @@ build_lrouter_nat_flows_for_lb(struct ovn_lb_vip *lb_vip, char *est_match_p = est_match; const char *meter = NULL; - if (reject) { - meter = copp_meter_get(COPP_REJECT, od->nbr->copp, meter_groups); - } - if (sset_contains(&od->external_ips, lb_vip->vip_str)) { /* The load balancer vip is also present in the NAT entries. * So add a high priority lflow to advance the the packet @@ -10026,8 +10022,15 @@ build_lrouter_nat_flows_for_lb(struct ovn_lb_vip *lb_vip, &lb->nlb->header_); } - if (od->n_l3dgw_ports && - (lb_vip->n_backends || !lb_vip->empty_backend_rej)) { + if (!od->n_l3dgw_ports) { + continue; + } + + if (reject) { + meter = copp_meter_get(COPP_REJECT, od->nbr->copp, meter_groups); + } + + if (lb_vip->n_backends || !lb_vip->empty_backend_rej) { new_match_p = xasprintf("%s && is_chassis_resident(%s)", new_match, od->l3dgw_ports[0]->cr_port->json_key); @@ -10037,33 +10040,27 @@ build_lrouter_nat_flows_for_lb(struct ovn_lb_vip *lb_vip, } if (snat_type == SKIP_SNAT) { - if (od->n_l3dgw_ports) { - ovn_lflow_add_with_hint__(lflows, od, S_ROUTER_IN_DNAT, prio, - new_match_p, skip_snat_new_action, - NULL, meter, &lb->nlb->header_); - ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_DNAT, prio, - est_match_p, skip_snat_est_action, - &lb->nlb->header_); - } + ovn_lflow_add_with_hint__(lflows, od, S_ROUTER_IN_DNAT, prio, + new_match_p, skip_snat_new_action, + NULL, meter, &lb->nlb->header_); + ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_DNAT, prio, + est_match_p, skip_snat_est_action, + &lb->nlb->header_); } else if (snat_type == FORCE_SNAT) { - if (od->n_l3dgw_ports) { - ovn_lflow_add_with_hint__(lflows, od, S_ROUTER_IN_DNAT, prio, - new_match_p, new_actions, NULL, - meter, &lb->nlb->header_); - ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_DNAT, prio, - est_match_p, - "flags.force_snat_for_lb = 1; next;", - &lb->nlb->header_); - } + ovn_lflow_add_with_hint__(lflows, od, S_ROUTER_IN_DNAT, prio, + new_match_p, new_actions, NULL, + meter, &lb->nlb->header_); + ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_DNAT, prio, + est_match_p, + "flags.force_snat_for_lb = 1; next;", + &lb->nlb->header_); } else if (snat_type == NO_FORCE_SNAT) { - if (od->n_l3dgw_ports) { - ovn_lflow_add_with_hint__(lflows, od, S_ROUTER_IN_DNAT, prio, - new_match_p, ds_cstr(action), NULL, - meter, &lb->nlb->header_); - ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_DNAT, prio, - est_match_p, "next;", - &lb->nlb->header_); - } + ovn_lflow_add_with_hint__(lflows, od, S_ROUTER_IN_DNAT, prio, + new_match_p, ds_cstr(action), NULL, + meter, &lb->nlb->header_); + ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_DNAT, prio, + est_match_p, "next;", + &lb->nlb->header_); } if (new_match_p != new_match) { @@ -10073,7 +10070,7 @@ build_lrouter_nat_flows_for_lb(struct ovn_lb_vip *lb_vip, free(est_match_p); } - if (!od->n_l3dgw_ports || !lb_vip->n_backends) { + if (!lb_vip->n_backends) { continue; } -- 2.35.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev