> Signed-off-by: Alexandra Rukomoinikova <[email protected]>

Acked-by: Lorenzo Bianconi <[email protected]>

> ---
>  northd/northd.c | 96 +++++++++++++++++++------------------------------
>  1 file changed, 37 insertions(+), 59 deletions(-)
> ---
> v1 --> v2: nothind changed
> diff --git a/northd/northd.c b/northd/northd.c
> index 55e31659f..8b5753f16 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -10622,6 +10622,41 @@ build_lswitch_ip_mcast_igmp_mld(struct 
> ovn_igmp_group *igmp_group,
>                    90, ds_cstr(match), ds_cstr(actions), lflow_ref);
>  }
>  
> +static void
> +add_lrp_chassis_resident_check(struct ovn_port *op,
> +                               struct ds *match)
> +{
> +    bool add_chassis_resident_check = false;
> +    const char *json_key;
> +
> +    if (lrp_is_l3dgw(op)) {
> +        /* The peer of this port represents a distributed
> +         * gateway port. The destination lookup flow for the
> +         * router's distributed gateway port MAC address should
> +         * only be programmed on the gateway chassis. */
> +        add_chassis_resident_check = true;
> +        json_key = op->cr_port->json_key;
> +    } else {
> +        /* Check if the option 'reside-on-redirect-chassis'
> +         * is set to true on the peer port. If set to true
> +         * and if the logical switch has a localnet port, it
> +         * means the router pipeline for the packets from
> +         * this logical switch should be run on the chassis
> +         * hosting the gateway port.
> +         */
> +        add_chassis_resident_check = smap_get_bool(
> +            &op->nbrp->options,
> +            "reside-on-redirect-chassis", false) &&
> +            vector_len(&op->od->l3dgw_ports) == 1;
> +        json_key = vector_get(&op->od->l3dgw_ports, 0,
> +                              struct ovn_port *)->cr_port->json_key;
> +    }
> +
> +    if (add_chassis_resident_check) {
> +        ds_put_format(match, " && is_chassis_resident(%s)", json_key);
> +    }
> +}
> +
>  /* Ingress table 25: Destination lookup, unicast handling (priority 50), */
>  static void
>  build_lswitch_ip_unicast_lookup(struct ovn_port *op,
> @@ -10671,34 +10706,7 @@ build_lswitch_ip_unicast_lookup(struct ovn_port *op,
>  
>          if (!vector_is_empty(&op->peer->od->l3dgw_ports) &&
>              !vector_is_empty(&op->od->localnet_ports)) {
> -            bool add_chassis_resident_check = false;
> -            const char *json_key;
> -            if (lrp_is_l3dgw(op->peer)) {
> -                /* The peer of this port represents a distributed
> -                    * gateway port. The destination lookup flow for the
> -                    * router's distributed gateway port MAC address should
> -                    * only be programmed on the gateway chassis. */
> -                add_chassis_resident_check = true;
> -                json_key = op->peer->cr_port->json_key;
> -            } else {
> -                /* Check if the option 'reside-on-redirect-chassis'
> -                 * is set to true on the peer port. If set to true
> -                 * and if the logical switch has a localnet port, it
> -                 * means the router pipeline for the packets from
> -                 * this logical switch should be run on the chassis
> -                 * hosting the gateway port.
> -                 */
> -                add_chassis_resident_check = smap_get_bool(
> -                    &op->peer->nbrp->options,
> -                    "reside-on-redirect-chassis", false) &&
> -                    vector_len(&op->peer->od->l3dgw_ports) == 1;
> -                json_key = vector_get(&op->peer->od->l3dgw_ports, 0,
> -                                      struct ovn_port *)->cr_port->json_key;
> -            }
> -
> -            if (add_chassis_resident_check) {
> -                ds_put_format(match, " && is_chassis_resident(%s)", 
> json_key);
> -            }
> +            add_lrp_chassis_resident_check(op->peer, match);
>          } else if (op->cr_port) {
>              /* If the op has a chassis resident port, it means
>               *   - its peer is a distributed gateway port (DGP) and
> @@ -16361,37 +16369,7 @@ build_lrouter_ipv4_ip_input(struct ovn_port *op,
>  
>          if (!vector_is_empty(&op->od->l3dgw_ports) && op->peer
>              && !vector_is_empty(&op->peer->od->localnet_ports)) {
> -            bool add_chassis_resident_check = false;
> -            const char *json_key;
> -            if (lrp_is_l3dgw(op)) {
> -                /* Traffic with eth.src = l3dgw_port->lrp_networks.ea_s
> -                 * should only be sent from the gateway chassis, so that
> -                 * upstream MAC learning points to the gateway chassis.
> -                 * Also need to avoid generation of multiple ARP responses
> -                 * from different chassis. */
> -                add_chassis_resident_check = true;
> -                json_key = op->cr_port->json_key;
> -            } else {
> -                /* Check if the option 'reside-on-redirect-chassis'
> -                 * is set to true on the router port. If set to true
> -                 * and if peer's logical switch has a localnet port, it
> -                 * means the router pipeline for the packets from
> -                 * peer's logical switch is be run on the chassis
> -                 * hosting the gateway port and it should reply to the
> -                 * ARP requests for the router port IPs.
> -                 */
> -                add_chassis_resident_check = smap_get_bool(
> -                    &op->nbrp->options,
> -                    "reside-on-redirect-chassis", false) &&
> -                    vector_len(&op->od->l3dgw_ports) == 1;
> -                json_key = vector_get(&op->od->l3dgw_ports, 0,
> -                                      struct ovn_port *)->cr_port->json_key;
> -            }
> -
> -            if (add_chassis_resident_check) {
> -                ds_put_format(match, " && is_chassis_resident(%s)",
> -                              json_key);
> -            }
> +            add_lrp_chassis_resident_check(op, match);
>          }
>  
>          build_lrouter_arp_flow(op->od, op,
> -- 
> 2.48.1
> 
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to