> On Nov 9, 2015, at 12:50 PM, Joe Stringer <[email protected]> wrote: > > On 9 November 2015 at 10:56, Joe Stringer <[email protected] > <mailto:[email protected]>> 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 >> packet will continue processing, including to return back to prior >> resubmit() calls. >> >> Reported-by: Russell Bryant <[email protected] <mailto:[email protected]>> >> Signed-off-by: Joe Stringer <[email protected] >> <mailto:[email protected]>> > > FWIW, the main change in this commit is actually to avoid the > following instruction in ctx_trigger_recirculation(): > > ctx->exit = true; > >> 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; > > This is actually indicating that the current action set should be > preserved for the recirculated packet. At minimum the > documentation/commit message should be updated to reflect this. I also > welcome discussion on the implications of preserving the action set > across recirculation.
For implicit recirculation, like for pop mpls and then goto/resubmit to another table to match the inner header, we have no other option than to preserve the action set across the recirculation, otherwise we would break behavior standardized for the action set. So the discussion here should pertain only to the explicit recirculation we do with the conntrack action, i.e., should the recirculated packet start with an empty action set, or inherit it from the recirculating flow (at the point of recirculation), as currently happens. The registers and other metadata is inherited in the same fashion, and that can be very useful in that the pipeline processing need not start from an empty state after recirculation. I would say that preserving the action set serves the same purpose, and the flows in the recirculated to table can always clear the action set (clear_actions) if that is desired. Jarno _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
