[ovs-dev,merge,native,tunneling,and,port,3/7] ofproto-dpif: Refactor compose_clone()

Message ID 1505245749-3402-3-git-send-email-azhou@ovn.org
State Accepted
Headers show
Series
  • [ovs-dev,merge,native,tunneling,and,port,1/7] ofproto-dpif: Unfreeze within clone
Related show

Commit Message

Andy Zhou Sept. 12, 2017, 7:49 p.m.
Add a new function clone_xlate_actions(), which shares the same
signature as do_xlate_actions();  Later patch will make use
of this function.

Signed-off-by: Andy Zhou <azhou@ovn.org>
---
 ofproto/ofproto-dpif-xlate.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

Comments

Gregory Rose Sept. 21, 2017, 4:48 p.m. | #1
On 09/12/2017 12:49 PM, Andy Zhou wrote:
> Add a new function clone_xlate_actions(), which shares the same
> signature as do_xlate_actions();  Later patch will make use
> of this function.
> 
> Signed-off-by: Andy Zhou <azhou@ovn.org>
> ---
>   ofproto/ofproto-dpif-xlate.c | 20 ++++++++++++++------
>   1 file changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index d5b47666e974..223313d4ecba 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -5334,7 +5334,8 @@ reversible_actions(const struct ofpact *ofpacts, size_t ofpacts_len)
>   }
>   
>   static void
> -compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
> +clone_xlate_actions(const struct ofpact *actions, size_t actions_len,
> +                    struct xlate_ctx *ctx)
>   {
>       struct ofpbuf old_stack = ctx->stack;
>       union mf_subvalue new_stack[1024 / sizeof(union mf_subvalue)];
> @@ -5347,12 +5348,11 @@ compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
>       ofpbuf_put(&ctx->action_set, old_action_set.data, old_action_set.size);
>   
>       size_t offset, ac_offset;
> -    size_t oc_actions_len = ofpact_nest_get_action_len(oc);
>       struct flow old_flow = ctx->xin->flow;
>   
> -    if (reversible_actions(oc->actions, oc_actions_len)) {
> +    if (reversible_actions(actions, actions_len)) {
>           old_flow = ctx->xin->flow;
> -        do_xlate_actions(oc->actions, oc_actions_len, ctx);
> +        do_xlate_actions(actions, actions_len, ctx);
>           if (ctx->freezing) {
>               finish_freezing(ctx);
>           }
> @@ -5373,7 +5373,7 @@ compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
>       if (ctx->xbridge->support.clone) { /* Use clone action */
>           /* Use clone action as datapath clone. */
>           offset = nl_msg_start_nested(ctx->odp_actions, OVS_ACTION_ATTR_CLONE);
> -        do_xlate_actions(oc->actions, oc_actions_len, ctx);
> +        do_xlate_actions(actions, actions_len, ctx);
>           if (ctx->freezing) {
>               finish_freezing(ctx);
>           }
> @@ -5386,7 +5386,7 @@ compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
>           offset = nl_msg_start_nested(ctx->odp_actions, OVS_ACTION_ATTR_SAMPLE);
>           ac_offset = nl_msg_start_nested(ctx->odp_actions,
>                                           OVS_SAMPLE_ATTR_ACTIONS);
> -        do_xlate_actions(oc->actions, oc_actions_len, ctx);
> +        do_xlate_actions(actions, actions_len, ctx);
>           if (ctx->freezing) {
>               finish_freezing(ctx);
>           }
> @@ -5425,6 +5425,14 @@ xlate_done:
>   }
>   
>   static void
> +compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
> +{
> +    size_t oc_actions_len = ofpact_nest_get_action_len(oc);
> +
> +    clone_xlate_actions(oc->actions, oc_actions_len, ctx);
> +}
> +
> +static void
>   xlate_meter_action(struct xlate_ctx *ctx, const struct ofpact_meter *meter)
>   {
>       if (meter->provider_meter_id != UINT32_MAX) {
> 

Tested-by: Greg Rose <gvrose8192@gmail.com>
Reviewed-by: Greg Rose <gvrose8192@gmail.com>

Patch

diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index d5b47666e974..223313d4ecba 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -5334,7 +5334,8 @@  reversible_actions(const struct ofpact *ofpacts, size_t ofpacts_len)
 }
 
 static void
-compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
+clone_xlate_actions(const struct ofpact *actions, size_t actions_len,
+                    struct xlate_ctx *ctx)
 {
     struct ofpbuf old_stack = ctx->stack;
     union mf_subvalue new_stack[1024 / sizeof(union mf_subvalue)];
@@ -5347,12 +5348,11 @@  compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
     ofpbuf_put(&ctx->action_set, old_action_set.data, old_action_set.size);
 
     size_t offset, ac_offset;
-    size_t oc_actions_len = ofpact_nest_get_action_len(oc);
     struct flow old_flow = ctx->xin->flow;
 
-    if (reversible_actions(oc->actions, oc_actions_len)) {
+    if (reversible_actions(actions, actions_len)) {
         old_flow = ctx->xin->flow;
-        do_xlate_actions(oc->actions, oc_actions_len, ctx);
+        do_xlate_actions(actions, actions_len, ctx);
         if (ctx->freezing) {
             finish_freezing(ctx);
         }
@@ -5373,7 +5373,7 @@  compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
     if (ctx->xbridge->support.clone) { /* Use clone action */
         /* Use clone action as datapath clone. */
         offset = nl_msg_start_nested(ctx->odp_actions, OVS_ACTION_ATTR_CLONE);
-        do_xlate_actions(oc->actions, oc_actions_len, ctx);
+        do_xlate_actions(actions, actions_len, ctx);
         if (ctx->freezing) {
             finish_freezing(ctx);
         }
@@ -5386,7 +5386,7 @@  compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
         offset = nl_msg_start_nested(ctx->odp_actions, OVS_ACTION_ATTR_SAMPLE);
         ac_offset = nl_msg_start_nested(ctx->odp_actions,
                                         OVS_SAMPLE_ATTR_ACTIONS);
-        do_xlate_actions(oc->actions, oc_actions_len, ctx);
+        do_xlate_actions(actions, actions_len, ctx);
         if (ctx->freezing) {
             finish_freezing(ctx);
         }
@@ -5425,6 +5425,14 @@  xlate_done:
 }
 
 static void
+compose_clone(struct xlate_ctx *ctx, const struct ofpact_nest *oc)
+{
+    size_t oc_actions_len = ofpact_nest_get_action_len(oc);
+
+    clone_xlate_actions(oc->actions, oc_actions_len, ctx);
+}
+
+static void
 xlate_meter_action(struct xlate_ctx *ctx, const struct ofpact_meter *meter)
 {
     if (meter->provider_meter_id != UINT32_MAX) {