On 9 March 2017 at 14:50, Andy Zhou <[email protected]> wrote:
> When datapath sample action only allow a small number of nested actions
> (i.e. less than 3), do not translate the OpenFlow's 'clone' action
> into datapath 'sample' action, since such translation would cause
> datapath to reject the flow, with 'EOVERFLOW', when OVS is used to
> implement the OVN pipeline, or more generally, when deeper nested
> clone are expected.
>
> Reported-by: Numan Siddique <[email protected]>
> Reported-at: 
> https://mail.openvswitch.org/pipermail/ovs-dev/2017-March/329586.html
> Signed-off-by: Andy Zhou <[email protected]>
> ---
>  ofproto/ofproto-dpif-xlate.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index 1998521..090e8d6 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -4794,13 +4794,20 @@ xlate_clone(struct xlate_ctx *ctx, const struct 
> ofpact_nest *oc)
>      /* Datapath clone action will make sure the pre clone packets
>       * are used for actions after clone. Save and restore
>       * ctx->base_flow to reflect this for the openflow pipeline. */
> -    struct flow old_base_flow = ctx->base_flow;
>      if (ctx->xbridge->support.clone) {
> +        struct flow old_base_flow = ctx->base_flow;
>          compose_clone_action(ctx, oc);
> -    } else {
> +        ctx->base_flow = old_base_flow;
> +    } else if (ctx->xbridge->support.sample_nesting > 3) {
> +        /* Avoid generate sample action if datapath
> +         * only allow small number of nesting. Deeper nesting
> +         * can cause the datapath to reject the generated flow.  */
> +        struct flow old_base_flow = ctx->base_flow;
>          compose_clone_action_using_sample(ctx, oc);
> +        ctx->base_flow = old_base_flow;
> +    } else {
> +        do_xlate_actions(oc->actions, ofpact_nest_get_action_len(oc), ctx);
>      }
> -    ctx->base_flow = old_base_flow;

I think that we should always store the old base flow before and
restore afterwards, regardless of how the clone gets actually
implemented.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to