[ovs-dev] [PATCH 1/2] ofproto-dpif-xlate: Don't stop processing after ct.

Jarno Rajahalme jarno at ovn.org
Mon Nov 9 23:36:44 UTC 2015


> On Nov 9, 2015, at 10:56 AM, Joe Stringer <joestringer at nicira.com> wrote:
> 
> If conntrack recirculates, it should not stop processing the current
> pipeline. The cloned packet will begin with a fresh action set in the
> table specified with the current metadata; The current copy of the

As discussed, the action set is forked as well. Assuming the commit message and the comment above the new function is fixed:

Acked-by: Jarno Rajahalme <jrajahalme at nicira.com>

  Jarno

> packet will continue processing, including to return back to prior
> resubmit() calls.
> 
> Reported-by: Russell Bryant <rbryant at redhat.com>
> Signed-off-by: Joe Stringer <joestringer at nicira.com>
> ---
> ofproto/ofproto-dpif-xlate.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index 325e308e3340..bc21fa894682 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -3591,6 +3591,16 @@ compose_recirculate_action(struct xlate_ctx *ctx)
>     compose_recirculate_action__(ctx, 0);
> }
> 
> +/* Fork the pipeline here. The recirculated packet will continue processing in
> + * 'table' with an empty action set, and the current packet will continue
> + * processing the current action list. */
> +static void
> +compose_recirculate_and_fork(struct xlate_ctx *ctx, uint8_t table)
> +{
> +    ctx->recirc_action_offset = ctx->action_set.size;
> +    compose_recirculate_action__(ctx, table);
> +}
> +
> static void
> compose_mpls_push_action(struct xlate_ctx *ctx, struct ofpact_push_mpls *mpls)
> {
> @@ -4239,8 +4249,7 @@ compose_conntrack_action(struct xlate_ctx *ctx, struct ofpact_conntrack *ofc)
>     } else {
>         /* Use ct_* fields from datapath during recirculation upcall. */
>         ctx->conntracked = true;
> -        ctx_trigger_recirculation(ctx);
> -        compose_recirculate_action__(ctx, ofc->recirc_table);
> +        compose_recirculate_and_fork(ctx, ofc->recirc_table);
>     }
> }
> 
> -- 
> 2.1.4
> 




More information about the dev mailing list