[ovs-dev] [PATCH v3 7/8] ofproto-dpif: Restore metadata and registers on recirculation.

Jarno Rajahalme jrajahalme at nicira.com
Tue Mar 17 22:06:37 UTC 2015


> On Mar 17, 2015, at 2:43 PM, Ben Pfaff <blp at nicira.com> wrote:
> 
> On Fri, Mar 13, 2015 at 04:52:00PM -0700, Jarno Rajahalme wrote:
>> xlate_actions() now considers an optional recirculation context (via
>> 'xin') and restores OpenFlow pipeline metadata (registers, 'metadata',
>> etc.) based on it.  The recirculation context may contain an action
>> set and stack to be restored and further actions to be executed upon
>> recirculation.  It also contains a table_id number to be used for rule
>> lookup in cases where no post-recirculation actions are used.
>> 
>> The translation context internal metadata is restored using a new
>> internal action: UNROLL_XLATE action stores the translation context
>> data visible to OpenFlow controllers via PACKET_IN messages.  This
>> includes the current table number and the current rule cookie.
>> UNROLL_XLATE actions are inserted only when the remaining actions may
>> generate PACKET_IN messages.
>> 
>> These changes allow the post-MPLS recirculation to properly continue
>> with the pipeline metadata that existed at the time of recirculation.
>> 
>> The internal table is still consulted for bonds.
>> 
>> Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
> 
> Clang says:
> 
>    ../ofproto/ofproto-dpif-rid.c:147:29: error: cast from 'const struct ofpact *'
>          to 'const uint64_t *' (aka 'const unsigned long long *') increases
>          required alignment from 2 to 4 [-Werror,-Wcast-align]
>            hash = hash_words64((const uint64_t *)ofpacts,
>                                ^~~~~~~~~~~~~~~~~~~~~~~~~

This is due to reverting the ofpact alignment patch in master after I sent this series.
I have already fixed this on my source code with an ALIGNED_CAST(const uint64_t *, ofpacts).

  Jarno


More information about the dev mailing list