When translating actions within open flow clone, actions generated
by finish_freezeing() should also be enclosed within the datapath
clone netlink encoding.

Signed-off-by: Andy Zhou <az...@ovn.org>
---
 ofproto/ofproto-dpif-xlate.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 9e1f837cb23e..e5ad832d7c47 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -5353,6 +5353,9 @@ compose_clone(struct xlate_ctx *ctx, const struct 
ofpact_nest *oc)
     if (reversible_actions(oc->actions, oc_actions_len)) {
         old_flow = ctx->xin->flow;
         do_xlate_actions(oc->actions, oc_actions_len, ctx);
+        if (ctx->freezing) {
+            finish_freezing(ctx);
+        }
         goto xlate_done;
     }
 
@@ -5372,6 +5375,9 @@ compose_clone(struct xlate_ctx *ctx, const struct 
ofpact_nest *oc)
         offset = nl_msg_start_nested(ctx->odp_actions, OVS_ACTION_ATTR_CLONE);
         ac_offset = ctx->odp_actions->size;
         do_xlate_actions(oc->actions, oc_actions_len, ctx);
+        if (ctx->freezing) {
+            finish_freezing(ctx);
+        }
         nl_msg_end_non_empty_nested(ctx->odp_actions, offset);
         goto dp_clone_done;
     }
@@ -5382,6 +5388,9 @@ compose_clone(struct xlate_ctx *ctx, const struct 
ofpact_nest *oc)
         ac_offset = nl_msg_start_nested(ctx->odp_actions,
                                         OVS_SAMPLE_ATTR_ACTIONS);
         do_xlate_actions(oc->actions, oc_actions_len, ctx);
+        if (ctx->freezing) {
+            finish_freezing(ctx);
+        }
         if (nl_msg_end_non_empty_nested(ctx->odp_actions, ac_offset)) {
             nl_msg_cancel_nested(ctx->odp_actions, offset);
         } else {
-- 
1.8.3.1

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to