Flaviof <fla...@flaviof.com> wrote on 07/28/2016 11:39:00 PM:

> From: Flaviof <fla...@flaviof.com>
> To: Ryan Moats/Omaha/IBM@IBMUS
> Cc: ovs dev <dev@openvswitch.org>
> Date: 07/28/2016 11:39 PM
> Subject: Re: [ovs-dev] [PATCH v3] ovn-controller: Persist desired
> conntrack groups.
>
> On Thu, Jul 28, 2016 at 5:17 PM, Ryan Moats <rmo...@us.ibm.com> wrote:
> With incremental processing of logical flows desired conntrack groups
> are not being persisted.  This patch adds this capability, with the
> side effect of adding a ds_clone method that this capability leverages.
>
> Signed-off-by: Ryan Moats <rmo...@us.ibm.com>
> Reported-by: Guru Shetty <g...@ovn.org>
> Reported-at: http://openvswitch.org/pipermail/dev/2016-July/076320.html
> Fixes: 70c7cfe ("ovn-controller: Add incremental processing to
> lflow_run and physical_run")
> ---
>  include/openvswitch/dynamic-string.h |  1 +
>  include/ovn/actions.h                |  6 +++++
>  lib/dynamic-string.c                 |  9 ++++++++
>  ovn/controller/lflow.c               |  2 ++
>  ovn/controller/ofctrl.c              | 43 +++++++++++++++++++++++
> +------------
>  ovn/controller/ofctrl.h              |  5 ++++-
>  ovn/controller/ovn-controller.c      |  2 +-
>  ovn/lib/actions.c                    |  1 +
>  8 files changed, 53 insertions(+), 16 deletions(-)
>
> diff --git a/include/openvswitch/dynamic-string.h b/include/
> openvswitch/dynamic-string.h
> index dfe2688..bf1f64a 100644
> --- a/include/openvswitch/dynamic-string.h
> +++ b/include/openvswitch/dynamic-string.h
> @@ -73,6 +73,7 @@ void ds_swap(struct ds *, struct ds *);
>
>  int ds_last(const struct ds *);
>  bool ds_chomp(struct ds *, int c);
> +void ds_clone(struct ds *, struct ds *);
>
>  /* Inline functions. */
>
> diff --git a/include/ovn/actions.h b/include/ovn/actions.h
> index 114c71e..55720ce 100644
> --- a/include/ovn/actions.h
> +++ b/include/ovn/actions.h
> @@ -22,7 +22,9 @@
>  #include "compiler.h"
>  #include "openvswitch/hmap.h"
>  #include "openvswitch/dynamic-string.h"
> +#include "openvswitch/uuid.h"
>  #include "util.h"
> +#include "uuid.h"
>
> Isn't   #include "openvswitch/uuid.h"    enough?
> Consider not doing   #include "uuid.h"

Whoever pushes this, please consider it removed :)

>  struct expr;
>  struct lexer;
> @@ -43,6 +45,7 @@ struct group_table {
>  struct group_info {
>      struct hmap_node hmap_node;
>      struct ds group;
> +    struct uuid lflow_uuid;
>      uint32_t group_id;
>  };
>
> @@ -107,6 +110,9 @@ struct action_params {
>      /* A struct to figure out the group_id for group actions. */
>      struct group_table *group_table;
>
> +    /* The logical flow uuid that drove this action. */
> +    struct uuid lflow_uuid;
> +
>      /* OVN maps each logical flow table (ltable), one-to-one, onto a
physical
>       * OpenFlow flow table (ptable).  A number of parameters describe
this
>       * mapping and data related to flow tables:
> diff --git a/lib/dynamic-string.c b/lib/dynamic-string.c
> index 1f17a9f..6f7b610 100644
> --- a/lib/dynamic-string.c
> +++ b/lib/dynamic-string.c
> @@ -456,3 +456,12 @@ ds_chomp(struct ds *ds, int c)
>          return false;
>      }
>  }
> +
> +void
> +ds_clone(struct ds *dst, struct ds *source)
> +{
> +    dst->length = source->length;
> +    dst->allocated = dst->length;
> +    dst->string = xmalloc(dst->allocated + 1);
> +    memcpy(dst->string, source->string, dst->allocated + 1);
> +}
> diff --git a/ovn/controller/lflow.c b/ovn/controller/lflow.c
> index a4f3322..e38c32a 100644
> --- a/ovn/controller/lflow.c
> +++ b/ovn/controller/lflow.c
> @@ -383,6 +383,7 @@ add_logical_flows(struct controller_ctx *ctx,
> const struct lport_index *lports,
>
>      if (full_flow_processing) {
>          ovn_flow_table_clear();
> +        ovn_group_table_clear(group_table, false);
>          full_logical_flow_processing = true;
>          full_neighbor_flow_processing = true;
>          full_flow_processing = false;
> @@ -515,6 +516,7 @@ consider_logical_flow(const struct lport_index
*lports,
>          .aux = &aux,
>          .ct_zones = ct_zones,
>          .group_table = group_table,
> +        .lflow_uuid = lflow->header_.uuid,
>
>          .n_tables = LOG_PIPELINE_LEN,
>          .first_ptable = first_ptable,
> diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c
> index dd9f5ec..54bea99 100644
> --- a/ovn/controller/ofctrl.c
> +++ b/ovn/controller/ofctrl.c
>
> shouldn't  we also need to call
> ovn_group_table_clear(groups, true);
> from existing function ovn_flow_table_destroy(void)  ?

The existing ones are picked up from the desired ones,
so that's not necessary.

Ryan
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to