On Thu, Nov 23, 2023 at 8:24 AM Dumitru Ceara <[email protected]> wrote:

> On 10/26/23 20:14, [email protected] wrote:
> > From: Numan Siddique <[email protected]>
> >
> > It also moves the logical router port IPv6 prefix delegation
> > updates to "sync-from-sb" engine node.
> >
> > Signed-off-by: Numan Siddique <[email protected]>
> > ---
>
> I think I agree in general with the patch; I'd like to see the new
> revision however because the check that Han also commented on [0] in
> northd_handle_sb_port_binding_changes() makes me wonder too if we're not
> missing cases (or if we should just relax the LSP check as well).
>
> [0]
> https://mail.openvswitch.org/pipermail/ovs-dev/2023-November/409451.html
>
>


> Aside from that I left a few minor comments below.
>
> Thanks,
> Dumitru
>
> >  northd/en-northd.c  |   2 +-
> >  northd/en-sync-sb.c |   3 +-
> >  northd/northd.c     | 283 ++++++++++++++++++++++++++------------------
> >  northd/northd.h     |   6 +-
> >  tests/ovn-northd.at |  31 ++++-
> >  5 files changed, 198 insertions(+), 127 deletions(-)
> >
> > diff --git a/northd/en-northd.c b/northd/en-northd.c
> > index 96c2ce9f69..13e731cad9 100644
> > --- a/northd/en-northd.c
> > +++ b/northd/en-northd.c
> > @@ -189,7 +189,7 @@ northd_sb_port_binding_handler(struct engine_node
> *node,
> >      northd_get_input_data(node, &input_data);
> >
> >      if (!northd_handle_sb_port_binding_changes(
> > -        input_data.sbrec_port_binding_table, &nd->ls_ports)) {
> > +        input_data.sbrec_port_binding_table, &nd->ls_ports,
> &nd->lr_ports)) {
> >          return false;
> >      }
> >
> > diff --git a/northd/en-sync-sb.c b/northd/en-sync-sb.c
> > index 2540fcfb97..a14c609acd 100644
> > --- a/northd/en-sync-sb.c
> > +++ b/northd/en-sync-sb.c
> > @@ -288,7 +288,8 @@ en_sync_to_sb_pb_run(struct engine_node *node, void
> *data OVS_UNUSED)
> >      const struct engine_context *eng_ctx = engine_get_context();
> >      struct northd_data *northd_data = engine_get_input_data("northd",
> node);
> >
> > -    sync_pbs(eng_ctx->ovnsb_idl_txn, &northd_data->ls_ports);
> > +    sync_pbs(eng_ctx->ovnsb_idl_txn, &northd_data->ls_ports,
> > +             &northd_data->lr_ports);
> >      engine_set_node_state(node, EN_UPDATED);
> >  }
> >
> > diff --git a/northd/northd.c b/northd/northd.c
> > index 9ce1b2cb5a..c9c7045755 100644
> > --- a/northd/northd.c
> > +++ b/northd/northd.c
> > @@ -3419,6 +3419,9 @@ ovn_port_update_sbrec(struct ovsdb_idl_txn
> *ovnsb_txn,
> >  {
> >      sbrec_port_binding_set_datapath(op->sb, op->od->sb);
> >      if (op->nbrp) {
> > +        /* Note: SB port binding options for router ports are set in
> > +         * sync_pbs(). */
> > +
> >          /* If the router is for l3 gateway, it resides on a chassis
> >           * and its port type is "l3gateway". */
> >          const char *chassis_name = smap_get(&op->od->nbr->options,
> "chassis");
> > @@ -3430,15 +3433,11 @@ ovn_port_update_sbrec(struct ovsdb_idl_txn
> *ovnsb_txn,
> >              sbrec_port_binding_set_type(op->sb, "patch");
> >          }
> >
> > -        struct smap new;
> > -        smap_init(&new);
> >          if (is_cr_port(op)) {
> >              ovs_assert(sbrec_chassis_by_name);
> >              ovs_assert(sbrec_chassis_by_hostname);
> >              ovs_assert(sbrec_ha_chassis_grp_by_name);
> >              ovs_assert(active_ha_chassis_grps);
> > -            const char *redirect_type = smap_get(&op->nbrp->options,
> > -                                                 "redirect-type");
> >
> >              if (op->nbrp->ha_chassis_group) {
> >                  if (op->nbrp->n_gateway_chassis) {
> > @@ -3480,49 +3479,8 @@ ovn_port_update_sbrec(struct ovsdb_idl_txn
> *ovnsb_txn,
> >                  /* Delete the legacy gateway_chassis from the pb. */
> >                  sbrec_port_binding_set_gateway_chassis(op->sb, NULL, 0);
> >              }
> > -            smap_add(&new, "distributed-port", op->nbrp->name);
> > -
> > -            bool always_redirect =
> > -                !op->od->has_distributed_nat &&
> > -                !l3dgw_port_has_associated_vtep_lports(op->l3dgw_port);
> > -
> > -            if (redirect_type) {
> > -                smap_add(&new, "redirect-type", redirect_type);
> > -                /* XXX Why can't we enable always-redirect when
> redirect-type
> > -                 * is bridged? */
> > -                if (!strcmp(redirect_type, "bridged")) {
> > -                    always_redirect = false;
> > -                }
> > -            }
> > -
> > -            if (always_redirect) {
> > -                smap_add(&new, "always-redirect", "true");
> > -            }
> > -        } else {
> > -            if (op->peer) {
> > -                smap_add(&new, "peer", op->peer->key);
> > -                if (op->nbrp->ha_chassis_group ||
> > -                    op->nbrp->n_gateway_chassis) {
> > -                    char *redirect_name =
> > -                        ovn_chassis_redirect_name(op->nbrp->name);
> > -                    smap_add(&new, "chassis-redirect-port",
> redirect_name);
> > -                    free(redirect_name);
> > -                }
> > -            }
> > -            if (chassis_name) {
> > -                smap_add(&new, "l3gateway-chassis", chassis_name);
> > -            }
> > -        }
> > -
> > -        const char *ipv6_pd_list = smap_get(&op->sb->options,
> > -                                            "ipv6_ra_pd_list");
> > -        if (ipv6_pd_list) {
> > -            smap_add(&new, "ipv6_ra_pd_list", ipv6_pd_list);
> >          }
> >
> > -        sbrec_port_binding_set_options(op->sb, &new);
> > -        smap_destroy(&new);
> > -
> >          sbrec_port_binding_set_parent_port(op->sb, NULL);
> >          sbrec_port_binding_set_tag(op->sb, NULL, 0);
> >
> > @@ -4752,12 +4710,14 @@ check_sb_lb_duplicates(const struct
> sbrec_load_balancer_table *table)
> >      return duplicates;
> >  }
> >
> > -/* Syncs the SB port binding for the ovn_port 'op'.  Caller should make
> sure
> > - * that the OVN SB IDL txn is not NULL.  Presently it only syncs the nat
> > - * column of port binding corresponding to the 'op->nbsp' */
> > +/* Syncs the SB port binding for the ovn_port 'op' of a logical switch
> port.
> > + * Caller should make sure that the OVN SB IDL txn is not NULL.
> Presently it
> > + * only syncs the nat column of port binding corresponding to the
> 'op->nbsp' */
> >  static void
> > -sync_pb_for_op(struct ovn_port *op)
> > +sync_pb_for_lsp(struct ovn_port *op)
> >  {
> > +    ovs_assert(op->nbsp);
> > +
> >      if (lsp_is_router(op->nbsp)) {
> >          const char *chassis = NULL;
> >          if (op->peer && op->peer->od && op->peer->od->nbr) {
> > @@ -4879,18 +4839,87 @@ sync_pb_for_op(struct ovn_port *op)
> >      }
> >  }
> >
> > +/* Syncs the SB port binding for the ovn_port 'op' of a logical router
> port.
> > + * Caller should make sure that the OVN SB IDL txn is not NULL.
> Presently it
> > + * only sets the port binding options column for the router ports */
> > +static void
> > +sync_pb_for_lrp(struct ovn_port *op)
> > +{
> > +    ovs_assert(op->nbrp);
> > +
> > +    struct smap new;
> > +    smap_init(&new);
> > +
> > +    const char *chassis_name = smap_get(&op->od->nbr->options,
> "chassis");
> > +    if (is_cr_port(op)) {
> > +        smap_add(&new, "distributed-port", op->nbrp->name);
> > +
> > +        bool always_redirect =
> > +            !op->od->has_distributed_nat &&
> > +            !l3dgw_port_has_associated_vtep_lports(op->l3dgw_port);
> > +
> > +        const char *redirect_type = smap_get(&op->nbrp->options,
> > +                                            "redirect-type");
> > +        if (redirect_type) {
> > +            smap_add(&new, "redirect-type", redirect_type);
> > +            /* XXX Why can't we enable always-redirect when
> redirect-type
> > +                * is bridged? */
> > +            if (!strcmp(redirect_type, "bridged")) {
> > +                always_redirect = false;
> > +            }
> > +        }
> > +
> > +        if (always_redirect) {
> > +            smap_add(&new, "always-redirect", "true");
> > +        }
> > +    } else {
> > +        if (op->peer) {
> > +            smap_add(&new, "peer", op->peer->key);
> > +            if (op->nbrp->ha_chassis_group ||
> > +                op->nbrp->n_gateway_chassis) {
> > +                char *redirect_name =
> > +                    ovn_chassis_redirect_name(op->nbrp->name);
> > +                smap_add(&new, "chassis-redirect-port", redirect_name);
> > +                free(redirect_name);
> > +            }
> > +        }
> > +        if (chassis_name) {
> > +            smap_add(&new, "l3gateway-chassis", chassis_name);
> > +        }
> > +    }
> > +
> > +    const char *ipv6_pd_list = smap_get(&op->sb->options,
> > +                                        "ipv6_ra_pd_list");
>
> Nit: this now fits on a single line.
>
> > +    if (ipv6_pd_list) {
> > +        smap_add(&new, "ipv6_ra_pd_list", ipv6_pd_list);
> > +    }
> > +
> > +    sbrec_port_binding_set_options(op->sb, &new);
> > +    smap_destroy(&new);
> > +}
> > +
> > +static void ovn_update_ipv6_options(struct hmap *lr_ports);
> > +static void ovn_update_ipv6_opt_for_op(struct ovn_port *op);
> > +
> >  /* Sync the SB Port bindings which needs to be updated.
> >   * Presently it syncs the nat column of port bindings corresponding to
> >   * the logical switch ports. */
> >  void
> > -sync_pbs(struct ovsdb_idl_txn *ovnsb_idl_txn, struct hmap *ls_ports)
> > +sync_pbs(struct ovsdb_idl_txn *ovnsb_idl_txn, struct hmap *ls_ports,
> > +         struct hmap *lr_ports)
> >  {
> >      ovs_assert(ovnsb_idl_txn);
> >
> >      struct ovn_port *op;
> >      HMAP_FOR_EACH (op, key_node, ls_ports) {
> > -        sync_pb_for_op(op);
> > +        sync_pb_for_lsp(op);
> > +    }
> > +
> > +    HMAP_FOR_EACH (op, key_node, lr_ports) {
> > +        sync_pb_for_lrp(op);
> >      }
> > +
> > +    ovn_update_ipv6_options(lr_ports);
> >  }
> >
> >  /* Sync the SB Port bindings for the added and updated logical switch
> ports
> > @@ -4902,12 +4931,22 @@ sync_pbs_for_northd_changed_ovn_ports( struct
> tracked_ovn_ports *trk_ovn_ports)
> >      struct ovn_port *op;
> >      HMAPX_FOR_EACH (hmapx_node, &trk_ovn_ports->created) {
> >          op = hmapx_node->data;
> > -        sync_pb_for_op(op);
> > +        if (op->nbsp) {
> > +            sync_pb_for_lsp(op);
> > +        } else {
> > +            sync_pb_for_lrp(op);
> > +            ovn_update_ipv6_opt_for_op(op);
> > +        }
> >      }
> >
> >      HMAPX_FOR_EACH (hmapx_node, &trk_ovn_ports->updated) {
> >          op = hmapx_node->data;
> > -        sync_pb_for_op(op);
> > +        if (op->nbsp) {
> > +            sync_pb_for_lsp(op);
> > +        } else {
> > +            sync_pb_for_lrp(op);
> > +            ovn_update_ipv6_opt_for_op(op);
> > +        }
> >      }
> >
> >      return true;
> > @@ -5703,20 +5742,21 @@ fail:
> >  bool
> >  northd_handle_sb_port_binding_changes(
> >      const struct sbrec_port_binding_table *sbrec_port_binding_table,
> > -    struct hmap *ls_ports)
> > +    struct hmap *ls_ports, struct hmap *lr_ports)
> >  {
> >      const struct sbrec_port_binding *pb;
> >      static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
> >      SBREC_PORT_BINDING_TABLE_FOR_EACH_TRACKED (pb,
> sbrec_port_binding_table) {
> > -        /* Return false if the 'pb' belongs to a router port.  We don't
> handle
> > -         * I-P for router ports yet. */
> > -        if (is_pb_router_type(pb)) {
> > -            return false;
> > -        }
> > +        bool is_router_port = is_pb_router_type(pb);
> > +        struct ovn_port *op;
> >
> > -        struct ovn_port *op = ovn_port_find(ls_ports, pb->logical_port);
> > -        if (op && !op->lsp_can_be_inc_processed) {
> > -            return false;
> > +        if (is_router_port) {
> > +            op = ovn_port_find(lr_ports, pb->logical_port);
> > +        } else {
> > +            op = ovn_port_find(ls_ports, pb->logical_port);
> > +            if (op && !op->lsp_can_be_inc_processed) {
> > +                return false;
> > +            }
> >          }
> >
> >          if (sbrec_port_binding_is_new(pb)) {
> > @@ -5725,7 +5765,8 @@ northd_handle_sb_port_binding_changes(
> >               * pointer in northd data. Fallback to recompute otherwise.
> */
> >              if (!op) {
> >                  VLOG_WARN_RL(&rl, "A port-binding for %s is created but
> the "
> > -                            "LSP is not found.", pb->logical_port);
> > +                            "%s is not found.", pb->logical_port,
> > +                            is_router_port ? "LRP" : "LSP");
> >                  return false;
> >              }
> >              op->sb = pb;
> > @@ -5736,7 +5777,7 @@ northd_handle_sb_port_binding_changes(
> >               * sb idl pointers and other unexpected behavior. */
> >              if (op) {
> >                  VLOG_WARN_RL(&rl, "A port-binding for %s is deleted but
> the "
> > -                            "LSP still exists.", pb->logical_port);
> > +                            "LSP/LRP still exists.", pb->logical_port);
> >                  return false;
> >              }
> >          } else {
> > @@ -5746,7 +5787,8 @@ northd_handle_sb_port_binding_changes(
> >               * Fallback to recompute for anything unexpected. */
> >              if (!op) {
> >                  VLOG_WARN_RL(&rl, "A port-binding for %s is updated but
> the "
> > -                            "LSP is not found.", pb->logical_port);
> > +                            "%s is not found.", pb->logical_port,
> > +                            is_router_port ? "LRP" : "LSP");
> >                  return false;
> >              }
> >              if (op->sb != pb) {
> > @@ -7895,67 +7937,72 @@ static void
> >  copy_ra_to_sb(struct ovn_port *op, const char *address_mode);
> >
> >  static void
> > -ovn_update_ipv6_options(struct hmap *lr_ports)
> > +ovn_update_ipv6_opt_for_op(struct ovn_port *op)
> >  {
> > -    struct ovn_port *op;
> > -    HMAP_FOR_EACH (op, key_node, lr_ports) {
> > -        ovs_assert(op->nbrp);
> > -
> > -        if (op->nbrp->peer || !op->peer) {
> > -            continue;
> > -        }
> > +    if (op->nbrp->peer || !op->peer) {
> > +        return;
> > +    }
> >
> > -        if (!op->lrp_networks.n_ipv6_addrs) {
> > -            continue;
> > -        }
> > +    if (!op->lrp_networks.n_ipv6_addrs) {
> > +        return;
> > +    }
> >
> > -        struct smap options;
> > -        smap_clone(&options, &op->sb->options);
> > +    struct smap options;
> > +    smap_clone(&options, &op->sb->options);
> >
> > -        /* enable IPv6 prefix delegation */
> > -        bool prefix_delegation = smap_get_bool(&op->nbrp->options,
> > -                                           "prefix_delegation", false);
> > -        if (!lrport_is_enabled(op->nbrp)) {
> > -            prefix_delegation = false;
> > -        }
> > -        if (smap_get_bool(&options, "ipv6_prefix_delegation",
> > -                          false) != prefix_delegation) {
> > -            smap_add(&options, "ipv6_prefix_delegation",
> > -                     prefix_delegation ? "true" : "false");
> > -        }
> > +    /* enable IPv6 prefix delegation */
> > +    bool prefix_delegation = smap_get_bool(&op->nbrp->options,
> > +                                        "prefix_delegation", false);
>
> Nit: please indent and align under the first function argument.
>
> > +    if (!lrport_is_enabled(op->nbrp)) {
> > +        prefix_delegation = false;
> > +    }
> > +    if (smap_get_bool(&options, "ipv6_prefix_delegation",
> > +                      false) != prefix_delegation) {
> > +        smap_add(&options, "ipv6_prefix_delegation",
> > +                 prefix_delegation ? "true" : "false");
> > +    }
> >
> > -        bool ipv6_prefix = smap_get_bool(&op->nbrp->options,
> > +    bool ipv6_prefix = smap_get_bool(&op->nbrp->options,
> >                                       "prefix", false);
> > -        if (!lrport_is_enabled(op->nbrp)) {
> > -            ipv6_prefix = false;
> > -        }
> > -        if (smap_get_bool(&options, "ipv6_prefix", false) !=
> ipv6_prefix) {
> > -            smap_add(&options, "ipv6_prefix",
> > -                     ipv6_prefix ? "true" : "false");
> > -        }
> > -        sbrec_port_binding_set_options(op->sb, &options);
> > +    if (!lrport_is_enabled(op->nbrp)) {
> > +        ipv6_prefix = false;
> > +    }
> > +    if (smap_get_bool(&options, "ipv6_prefix", false) != ipv6_prefix) {
> > +        smap_add(&options, "ipv6_prefix",
> > +                    ipv6_prefix ? "true" : "false");
>
> Nit: indent
>
>
Ack.  Addressed in v3.

> +    }
> > +    sbrec_port_binding_set_options(op->sb, &options);
> >
> > -        smap_destroy(&options);
> > +    smap_destroy(&options);
> >
> > -        const char *address_mode = smap_get(
> > -            &op->nbrp->ipv6_ra_configs, "address_mode");
> > +    const char *address_mode = smap_get(
> > +        &op->nbrp->ipv6_ra_configs, "address_mode");
>
> Nit: This can now be written as:
>
> const char *address_mode = smap_get(&op->nbrp->ipv6_ra_configs,
>                                     "address_mode");
>
>
Ack.  Addressed in v3.

>
> > -        if (!address_mode) {
> > -            continue;
> > -        }
> > -        if (strcmp(address_mode, "slaac") &&
> > -            strcmp(address_mode, "dhcpv6_stateful") &&
> > -            strcmp(address_mode, "dhcpv6_stateless")) {
> > -            static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1,
> 5);
> > -            VLOG_WARN_RL(&rl, "Invalid address mode [%s] defined",
> > -                         address_mode);
> > -            continue;
> > -        }
> > +    if (!address_mode) {
> > +        return;
> > +    }
> > +    if (strcmp(address_mode, "slaac") &&
> > +        strcmp(address_mode, "dhcpv6_stateful") &&
> > +        strcmp(address_mode, "dhcpv6_stateless")) {
> > +        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
> > +        VLOG_WARN_RL(&rl, "Invalid address mode [%s] defined",
> > +                        address_mode);
>
> Nit: indent
>
>
Ack.  Addressed in v3.


> +        return;
> > +    }
> >
> > -        if (smap_get_bool(&op->nbrp->ipv6_ra_configs, "send_periodic",
> > -                          false)) {
> > -            copy_ra_to_sb(op, address_mode);
> > -        }
> > +    if (smap_get_bool(&op->nbrp->ipv6_ra_configs, "send_periodic",
> > +                      false)) {
>
> Nit: It all fits on one line now.
>

Ack.  Addressed in v3.

Numan


> > +        copy_ra_to_sb(op, address_mode);
> > +    }
> > +}
> > +
> > +static void
> > +ovn_update_ipv6_options(struct hmap *lr_ports)
> > +{
> > +    struct ovn_port *op;
> > +    HMAP_FOR_EACH (op, key_node, lr_ports) {
> > +        ovs_assert(op->nbrp);
> > +        ovn_update_ipv6_opt_for_op(op);
> >      }
> >  }
> >
> > @@ -18027,8 +18074,6 @@ ovnnb_db_run(struct northd_input *input_data,
> >          &data->lr_ports);
> >      stopwatch_stop(BUILD_LFLOWS_CTX_STOPWATCH_NAME, time_msec());
> >      stopwatch_start(CLEAR_LFLOWS_CTX_STOPWATCH_NAME, time_msec());
> > -    ovn_update_ipv6_options(&data->lr_ports);
> > -    ovn_update_ipv6_prefix(&data->lr_ports);
> >
> >      sync_mirrors(ovnsb_txn, input_data->nbrec_mirror_table,
> >                   input_data->sbrec_mirror_table);
> > @@ -18359,6 +18404,8 @@ ovnsb_db_run(struct ovsdb_idl_txn *ovnnb_txn,
> >                                         &ha_ref_chassis_map);
> >      }
> >      shash_destroy(&ha_ref_chassis_map);
> > +
> > +    ovn_update_ipv6_prefix(lr_ports);
> >  }
> >
> >  const char *
> > diff --git a/northd/northd.h b/northd/northd.h
> > index 0478826f0a..3945e84bb8 100644
> > --- a/northd/northd.h
> > +++ b/northd/northd.h
> > @@ -368,7 +368,8 @@ bool lflow_handle_northd_port_changes(struct
> ovsdb_idl_txn *ovnsb_txn,
> >                                        struct lflow_input *,
> >                                        struct hmap *lflows);
> >  bool northd_handle_sb_port_binding_changes(
> > -    const struct sbrec_port_binding_table *, struct hmap *ls_ports);
> > +    const struct sbrec_port_binding_table *, struct hmap *ls_ports,
> > +    struct hmap *lr_ports);
> >
> >  struct tracked_lb_data;
> >  bool northd_handle_lb_data_changes(struct tracked_lb_data *,
> > @@ -398,7 +399,8 @@ void sync_lbs(struct ovsdb_idl_txn *, const struct
> sbrec_load_balancer_table *,
> >                struct chassis_features *chassis_features);
> >  bool check_sb_lb_duplicates(const struct sbrec_load_balancer_table *);
> >
> > -void sync_pbs(struct ovsdb_idl_txn *, struct hmap *ls_ports);
> > +void sync_pbs(struct ovsdb_idl_txn *, struct hmap *ls_ports,
> > +              struct hmap *lr_ports);
> >  bool sync_pbs_for_northd_changed_ovn_ports( struct tracked_ovn_ports *);
> >
> >  bool northd_has_tracked_data(struct northd_tracked_data *);
> > diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
> > index 699f6cfdce..55a244c8c4 100644
> > --- a/tests/ovn-northd.at
> > +++ b/tests/ovn-northd.at
> > @@ -11018,7 +11018,9 @@ check ovn-nbctl lsp-add sw0 sw0p1 --
> lsp-set-addresses sw0p1 "00:00:20:20:12:01
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-add lr0
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Adding a logical router port should result in recompute
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> > @@ -11026,8 +11028,10 @@ check ovn-nbctl lrp-add lr0 lr0-sw0
> 00:00:00:00:ff:01 10.0.0.1/24
> >  # for northd engine there will be both recompute and compute
> >  # first it will be recompute to handle lr0-sw0 and then a compute
> >  # for the SB port binding change.
> > -check_engine_stats northd recompute nocompute
> > +check_engine_stats northd recompute compute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  ovn-nbctl lsp-add sw0 sw0-lr0
> >  ovn-nbctl lsp-set-type sw0-lr0 router
> > @@ -11035,7 +11039,9 @@ ovn-nbctl lsp-set-addresses sw0-lr0
> 00:00:00:00:ff:01
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lsp-set-options sw0-lr0 router-port=lr0-sw0
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  ovn-nbctl ls-add public
> >  ovn-nbctl lrp-add lr0 lr0-public 00:00:20:20:12:13 172.168.0.100/24
> > @@ -11057,9 +11063,9 @@ ovn-nbctl --wait=hv lrp-set-gateway-chassis
> lr0-public hv1 20
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl set logical_router_port lr0-sw0 options:foo=bar
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > -
> > -check as northd ovn-appctl -t NORTHD_TYPE vlog/set dbg
> > +CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Do checks for NATs.
> >  # Add a NAT. This should not result in recompute of both northd and
> lflow
> > @@ -11068,6 +11074,7 @@ check as northd ovn-appctl -t NORTHD_TYPE
> inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-nat-add lr0 dnat_and_snat  172.168.0.110
> 10.0.0.4
> >  check_engine_stats northd recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Update the NAT options column
> > @@ -11075,6 +11082,7 @@ check as northd ovn-appctl -t NORTHD_TYPE
> inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb set NAT . options:foo=bar
> >  check_engine_stats northd recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Update the NAT external_ip column
> > @@ -11082,6 +11090,7 @@ check as northd ovn-appctl -t NORTHD_TYPE
> inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb set NAT . external_ip=172.168.0.120
> >  check_engine_stats northd recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Update the NAT logical_ip column
> > @@ -11089,6 +11098,7 @@ check as northd ovn-appctl -t NORTHD_TYPE
> inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb set NAT . logical_ip=10.0.0.10
> >  check_engine_stats northd recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Update the NAT type
> > @@ -11096,13 +11106,15 @@ check as northd ovn-appctl -t NORTHD_TYPE
> inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb set NAT . type=snat
> >  check_engine_stats northd recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Create a dnat_and_snat NAT with external_mac and logical_port
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-nat-add lr0 dnat_and_snat 172.168.0.110
> 10.0.0.4 sw0p1 30:54:00:00:00:03
> > -check_engine_stats northd recompute nocompute
> > +check_engine_stats northd recompute compute
> >  check_engine_stats lflow recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  nat2_uuid=$(ovn-nbctl --bare --columns _uuid find nat
> logical_ip=10.0.0.4)
> > @@ -11111,6 +11123,7 @@ check as northd ovn-appctl -t NORTHD_TYPE
> inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb set NAT $nat2_uuid
> external_mac='"30:54:00:00:00:04"'
> >  check_engine_stats northd recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Create a load balancer and add the lb vip as NAT
> > @@ -11124,31 +11137,35 @@ check ovn-nbctl lr-lb-add lr0 lb2
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-nat-add lr0 dnat_and_snat 172.168.0.140
> 10.0.0.20
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-nat-add lr0 dnat_and_snat 172.168.0.150
> 10.0.0.41
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-nat-del lr0 dnat_and_snat 172.168.0.150
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-nat-del lr0 dnat_and_snat 172.168.0.140
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  # Delete the NAT
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb clear logical_router lr0 nat
> > -check_engine_stats northd recompute nocompute
> > +check_engine_stats northd recompute compute
> >  check_engine_stats lflow recompute nocompute
> >  check_engine_stats sync_to_sb_pb recompute nocompute
> >  CHECK_NO_CHANGE_AFTER_RECOMPUTE
> > @@ -11157,12 +11174,16 @@ CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-policy-add lr0  10 "ip4.src == 10.0.0.3"
> reroute 172.168.0.101,172.168.0.102
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
> >  check ovn-nbctl --wait=sb lr-policy-del lr0  10 "ip4.src == 10.0.0.3"
> >  check_engine_stats northd recompute nocompute
> > +check_engine_stats sync_to_sb_pb recompute nocompute
> >  check_engine_stats lflow recompute nocompute
> > +CHECK_NO_CHANGE_AFTER_RECOMPUTE
> >
> >  OVN_CLEANUP([hv1])
> >  AT_CLEANUP
>
> _______________________________________________
> 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